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”
Czy istnieje sposób to zrobić bez konieczności wpisywania pełnego adresu URL żądania za każdym razem, gdy chcę użyć find()? –
Poprosiłeś o to. Odpowiedź edytowana. –
Można również użyć 'site' i' prefix', aby skomponować pierwszą część adresu URL. – funwhilelost