3

私はコントローラをDRYするためにinherited_resourcesを使用していますが、特定のコントローラを正しく動作させる方法を理解することはできません。私のモデルでは、User has_one Person。私はそれが任意にネストされ、ネストされたときにはシングルトンとして、ネストされていないときには非シングルトンとして振舞いたい。言い換えれば、すべての既知の人々(/人)を一覧表示し、人#5(/人/ 5)を取得し、ユーザー10の唯一の人(/ユーザー/ 10 /人)を取得できるようにします。 routes.rbをして、次の:私は期待どおりinherited_resourceをオプションでシングルトンとしてネストする方法を教えてください。

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 /人のURLにはない: undefined method 'people'代わりに、もし、 PeopleControllerに、私が使用します。

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

...その後、ネストされた/ユーザー/:USER_ID /人は仕事をするURLが、それはシングルトンとして扱われているので、ネストされていない/人のURLにはありません、ノンネストされている場合でも:undefined method 'person'

要約:inherited_resourcesにresoを処理させる方法はありますかネストされたルートを介してアクセスされたときにシングルトンとしての欲求が、ネストされていないルートを介してアクセスされた場合は非シングルトンとして

答えて

3

誰かが同様のことをしようとしている場合は、私は単にinherited_resourcesを放棄してしまいました。私は私のコントローラーで起こっている「魔法」が少なくても幸せだと思っています。

関連する問題