resources :leagues do
resources :schedule
end
これにより、次が生成されます。
leagues/:id
leagues/:league_id/schedule/:id
リーグ ID がパラメーター名を変更しないようにするにはどうすればよいですか? したがって、次のようになります。
leagues/:id
leagues/:id/schedule/:schedule_id
resources :leagues do
resources :schedule
end
これにより、次が生成されます。
leagues/:id
leagues/:league_id/schedule/:id
リーグ ID がパラメーター名を変更しないようにするにはどうすればよいですか? したがって、次のようになります。
leagues/:id
leagues/:id/schedule/:schedule_id
いいえ、しないでください。
このようになっている理由は、ネストされたリソースに対して、すべてのアプリケーションで共通のインターフェースを提供するためです。アプリケーションで異なるものにすることで、事実上、Rails の「粒度に反する」ことになります。Rails には、従うべき厳密な規則があります。この道から外れると、物事はぐちゃぐちゃになります。
ただし、比喩的に言えば、自分の足を撃ちたい場合は、ルートを手動で定義する必要があります。コントローラーの 7 つの標準アクションのルートは次のとおりです。
get 'leagues/:id/schedules', :to => "schedules#index", :as => "league_schedules"
get 'leagues/:id/schedule/:schedule_id', :to => "schedules#show", :as => "league_schedule"
get 'leagues/:id/schedules/new', :to => "schedules#new", :as => "new_league_schedule"
post 'leagues/:id/schedules', :to => "schedules#create"
get 'leagues/:id/schedule/:schedule_id/edit', :to => "schedules#edit", :as => "ed it_league_schedule"
put 'leagues/:id/schedule/:schedule_id', :to => "schedules#update"
delete 'leagues/:id/schedule/:schedule_id', :to => "schedules#destroy"
ご覧のとおり、かなり醜いです。でも、もしあなたが本当に本当にこのようにしたいのなら、それがあなたのやり方です。
ID を nested_param に追加しますが、これは残念なことです。:id
競合が発生する可能性があるため、好きなだけにすることを本当に望んでいないようです。さらに、Rails が好んで使用する通常の安らかなルーティングとは少し異なります。
namespace :account, defaults: { type: 'account' }do
resources :auth, param: :lies_id, only: [] do
get :google
end
end
Rake ルートは以下を返します
$ rake routes | grep /account/auth
account_auth_google GET /account/auth/:auth_lies_id/google(.:format)
したがって、より簡単な解決策は、コントローラーが作成するネストされたパラメーター名を使用するようにコントローラーを変更することです。