Frage

Ich verwende inherited_resources, um meine Controller zu TROCKNEN, kann aber nicht herausfinden, wie sich ein bestimmter Controller richtig verhält.In meinem Modell, User has_one Person.Ich möchte, dass es optional verschachtelt ist, sich als Singleton verhält, wenn es verschachtelt ist, und als Nicht-Singleton, wenn es nicht verschachtelt ist.Mit anderen Worten, ich möchte in der Lage sein, alle bekannten Personen (/ Personen) aufzulisten, Person # 5 (/ person / 5) und die einzige Person von Benutzer 10 (/ Benutzer / 10 / person) zu erhalten.Das Folgende in Routen.rb:

resources :users
  resource :person
end
resources :people

...richtet die Routen so ein, wie ich es erwarte:

         user_person POST   /users/:user_id/person(.:format)                people#create
     new_user_person GET    /users/:user_id/person/new(.:format)            people#new
    edit_user_person GET    /users/:user_id/person/edit(.:format)           people#edit
                     GET    /users/:user_id/person(.:format)                people#show
                     PUT    /users/:user_id/person(.:format)                people#update
                     DELETE /users/:user_id/person(.:format)                people#destroy

              people GET    /people(.:format)                               people#index
                     POST   /people(.:format)                               people#create
          new_person GET    /people/new(.:format)                           people#new
         edit_person GET    /people/:id/edit(.:format)                      people#edit
              person GET    /people/:id(.:format)                           people#show
                     PUT    /people/:id(.:format)                           people#update
                     DELETE /people/:id(.:format)                           people#destroy

...so toll.Nun, wenn im PeopleController, benutze ich:

belongs_to :user, :optional => true

...dann funktionieren die nicht verschachtelten / Personen-URLs, die verschachtelten / Benutzer /: Benutzer-ID / Personen-URLs jedoch nicht: undefined method 'people' Wenn ich stattdessen im PeopleController verwende:

belongs_to :user, :optional => true, :singleton => true

...dann funktionieren die verschachtelten URLs / users /:user_id / person, die nicht verschachtelten URLs / people jedoch nicht, da sie als Singleton behandelt werden, auch wenn sie nicht verschachtelt sind: undefined method 'person'

Zusammenfassung:Gibt es eine Möglichkeit, inherited_resources dazu zu bringen, eine Ressource als Singleton zu behandeln, wenn auf sie über eine verschachtelte Route zugegriffen wird, aber als Nicht-Singleton, wenn auf sie über eine nicht verschachtelte Route zugegriffen wird?

War es hilfreich?

Lösung

Für den Fall, dass jemand versucht, etwas Ähnliches zu tun, habe ich am Ende einfach inherited_resources aufgegeben.Ich finde, ich bin glücklicher mit weniger "Magie" in meinen Controllern.

Andere Tipps

Es wird anscheinend nicht unterstützt: https://github.com/josevalim/inherited_resources/issues/169

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top