Wie zu Verwenden ActiveResource mit Flachen Verschachtelten Routen?
Ich habe eine Rails-Anwendung, die eine Unternehmens-Ressource mit einem verschachtelte Ressource Mitarbeiter. Ich bin mit flachen routing, so zu manipulieren, Mitarbeiter, meine Strecken sind:
GET /employees/1
PUT /employees/1
DELETE /employees/1
POST /companies/1/employees
Wie kann ich das erstellen, Lesen, aktualisieren und zerstören Mitarbeiter mit ActiveResource?
Zu erstellen, die Mitarbeiter, die ich verwenden kann:
class Employee < ActiveResource::Base
self.site = "http://example.com/companies/:company_id"
end
Aber wenn ich versuche zu tun:
e=Employee.find(1, :params => {:company_id => 1})
Bekomme ich einen 404, weil die Strecke /Unternehmen/:company_id/die Mitarbeiter/:id ist nicht definiert, wenn flache Strecken verwendet werden.
Lesen, Bearbeiten und löschen von Mitarbeitern, die ich verwenden kann:
class Employee < ActiveResource::Base
self.site = "http://example.com"
end
Aber dann scheint es nicht zu sein, eine Möglichkeit zu schaffen, neue Mitarbeiter, aufgrund des Fehlens der Unternehmen, die äußere route.
Eine Lösung wäre die separate definieren CompanyEmployee und Mitarbeiter Klassen, aber das scheint mir zu Komplex.
Wie kann ich mit einem einzigen Mitarbeiter-Klasse in ActiveResource, um alle vier CRUD-Operationen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein geschütztes Instanzmethode namens collection_path, könnte Sie überschreiben.
Würden Sie dann in der Lage sein diese zu erstellen Mitarbeiter.
Es scheint nicht, wie die prefix_options dokumentiert ist, anders als in der clone-Methode, so könnte dies in zukünftigen Versionen ändern.
self.prefix = "/companies/:company_id/"
statt überschreibencollection_path
Ich bin mit Rails 3.0.9. Sie können den Präfix so:
Dann
oder
Ersetzt :company_id mit dem Wert aus prefix_options.
Finden Sie in diesem Artikel: http://blog.flame.org/2009/11/04/activeresource-and-shallow-nested-routes.html
Hier, der Autor schlägt vor, um die override-Methode der Klasse collection_path. Dies macht Sinn, da diese Methode verwendet wird, auch durch new_element_path und ruft den gleichen Weg in beiden Fällen.
Beispiel:
Dann finden Sie Mitarbeiter für ein Unternehmen durch tun:
Fand ich es am besten überschreiben
ActiveResource::Base.element_path
mit der gleichen Funktionalität wie in der Bibliothek definiert ist, aber das weglassen der Verwendung vonprefix_options
im zurückgegebenen Wert. Es gibt keineDie Employee-Klasse verhält sich dann wie üblich mit keine Notwendigkeit, Sie zu ordnen prefix_options zu der Instanz vorgeschlagen, die in anderen Lösungen.