2012-09-26 14 views

Odpowiedz

8
class User < ActiveResource::Base 
    self.element_name = "user" 
end 

Następnie masz zamiar zapytać, jak uzyskać jeden element z adresu URL, który wygląda na ActiveResource być //foo.com/user.json zamiast //foo.com/user/.json

User.find(:one, :from => "https://foo.com/user.json?username=#{<USERNAME>}" 

Edytowanie w odpowiedzi na komentarz

Czy istnieje sposób to zrobić bez konieczności podawania pełnego adresu URL żądanie za każdym razem chcę użyć find()?

Jednym ze sposobów jest zdefiniowanie metody w klasie, aby uzyskać pełny adres URL.

class User < ActiveResource::Base 
    self.element_name = "user" 

    def self.find_by_username(username) 
    find(:one, :from => "https://foo.com/user.json?username=#{username}" 
    end 

    def find 
    self.class.find(:one, :from => "https://foo.com/user.json?username=#{username}" 
    end 
end 

Innym sposobem jest przedefiniowanie elementu element_path.

Niektórzy nazywają to łatanie małp, inni nazwaliby to programowaniem obiektowym. Mówię, że jest to łatanie małpy, kiedy wchodzisz w kod lub używasz dynamicznej natury Ruby do zmiany podstawowego zachowania i jest to całkowicie legalny sposób robienia rzeczy w Object Oriented Programming. Jednak społeczność Ruby nie używa OOP zbyt dużo, ignorując dziedziczenie na rzecz znacznie luźniejszych (i mniej dobrze zachowujących się) miksów i używa tylko kaczych piszących dla polimorfizmu.

Kłopoty z pomieszaniem z ActiveResource w celu zbudowania adresu URL, w którym nie można ponownie zdefiniować usługi internetowej, aby zaakceptować konwencje ActiveResource, jest powodem, dla którego wielu używa zamiast tego HTTParty. „Jeśli trzeba zbudować URL, może także używać HTTParty

+0

Czy istnieje sposób to zrobić bez konieczności wpisywania pełnego adresu URL żądania za każdym razem, gdy chcę użyć find()? –

+0

Poprosiłeś o to. Odpowiedź edytowana. –

+1

Można również użyć 'site' i' prefix', aby skomponować pierwszą część adresu URL. – funwhilelost

2

Jeśli trzeba tylko pozbyć nazwę zasobu liczby mnogiej w adresie URL, zastępują collection_name:

class User < ActiveResource::Base 
    self.element_name = "user" 

    def self.collection_name 
    element_name 
    end 
end