Question

J'utilise hérité_resources pour SÉCHER mes contrôleurs, mais je n'arrive pas à comprendre comment faire en sorte qu'un contrôleur particulier se comporte correctement.Dans mon modèle, User has_one Person.Je veux qu'il soit éventuellement imbriqué, qu'il se comporte comme un singleton lorsqu'il est imbriqué et comme un non-singleton lorsqu'il n'est pas imbriqué.En d'autres termes, je veux pouvoir lister toutes les personnes connues (/people), obtenir la personne n°5 (/person/5) et obtenir la seule personne de l'utilisateur 10 (/user/10/person).Ce qui suit dans routes.rb :

resources :users
  resource :person
end
resources :people

...établit les itinéraires comme prévu :

         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

...tellement bon.Maintenant, si dans le PeopleController, j'utilise :

belongs_to :user, :optional => true

...alors les URL non imbriquées /people fonctionnent, mais les URL imbriquées /users/:user_id/person ne le font pas : undefined method 'people' Si, à la place, dans le PeopleController, j'utilise :

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

...alors les URL imbriquées /users/:user_id/person fonctionnent, mais les URL non imbriquées /people ne le font pas car elles sont traitées comme un singleton, même lorsqu'elles ne sont pas imbriquées : undefined method 'person'

Résumé:Existe-t-il un moyen de faire en sorte que les ressources héritées gèrent une ressource comme un singleton lorsqu'on y accède via une route imbriquée, mais comme un non-singleton lorsqu'on y accède via une route non imbriquée ?

Était-ce utile?

La solution

Au cas où quelqu'un essaierait de faire quelque chose de similaire, j'ai fini par abandonnerhered_resources.Je trouve que je suis plus heureux avec moins de « magie » dans mes contrôleurs.

Autres conseils

Il n'est apparemment pas pris en charge : https://github.com/josevalim/inherited_resources/issues/169

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top