我正在使用inherited_resources来干燥我的控制器,但无法弄清楚如何使特定控制器正当行为。在我的模型中,User has_one Person。我希望它是可选择嵌套的,在嵌套时表现为单身,并且在未嵌套时作为非单例。换句话说,我希望能够列出所有已知的人(/人),获取人员#5(/人/ 5),并获取用户10的唯一人(/用户/ 10 /人)。在路由中如下所示:

resources :users
  resource :person
end
resources :people
.

...设置路线,因为我期望:

         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
.

......如此伟大。现在,如果在peoplecontroller中,我使用:

belongs_to :user, :optional => true
.

然后是非嵌套/人的URL工作,但嵌套/用户/:user_id / person ulls not:undefined method 'people'如果,而不是peoplecontroller,我使用:

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

然后...然后嵌套/用户/:user_id / person urls工作,但非嵌套/ people网址不会因为它被视为单例,即使是非嵌套:undefined method 'person'

摘要:在通过嵌套路由访问时,是否有一种方法可以使Inherited_resources将资源处理为单例,而是在通过不嵌套路由访问时作为非单例?

有帮助吗?

解决方案

如果任何人试图做类似的事情,我最终就放弃了Inherited_resources。我发现我的控制器中的“魔法”更幸福。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top