Pregunta

Estoy usando inherited_resources para secar mis controladores, pero no puedo averiguar cómo hacer que un controlador en particular se comporte correctamente. En mi modelo, User has_one Person. Quiero que esté opcionalmente anidado, se comporte como un singleton cuando está anidado, y como no singleton cuando no está anidado. En otras palabras, quiero poder listar a todas las personas conocidas (/ personas), consigue la persona # 5 (/ persona / 5) y obtenga la única persona del usuario (/ usuario / 10 / persona). Lo siguiente en rutas.rb:

resources :users
  resource :person
end
resources :people

... Establece las rutas como espero:

         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

... tan grande. Ahora, si en el PeopleController, yo uso:

belongs_to :user, :optional => true

... Luego, el trabajo no anidado / las personas que funcionan, pero las URLs anidadas / usuarios /: user_id / persona, no: undefined method 'people' si, en su lugar, en el Peoplecontroller, yo uso:

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

... Luego, los usuarios anidados / usuarios /: user_id / persona que funcionan, pero las URL no anidadas / personas no se incluyen porque se está tratando como un singleton, incluso cuando no está anidado: undefined method 'person'

Resumen: ¿Hay una manera de hacer que Hereited_Resources maneje un recurso como un singleton cuando se accede a través de una ruta anidada, pero como no singleton cuando se accede a través de una ruta no anidadida?

¿Fue útil?

Solución

En caso de que alguien esté tratando de hacer algo similar, terminé simplemente abandonando Heredited_Resources.Estoy encontrando que soy más feliz con menos "magia" en mis controladores.

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top