命名嵌套路由的参数

Fre*_*III 3 routes nested-routes ruby-on-rails-3

resources :leagues do
  resources :schedule
end
Run Code Online (Sandbox Code Playgroud)

这会产生:

leagues/:id
leagues/:league_id/schedule/:id
Run Code Online (Sandbox Code Playgroud)

如何保持联盟ID不会改变参数名称?所以它将是:

leagues/:id
leagues/:id/schedule/:schedule_id
Run Code Online (Sandbox Code Playgroud)

Rya*_*igg 9

不,请不要这样做.

这种方式的原因是它为每个应用程序中的嵌套资源提供了一个通用接口.通过在应用程序中使其不同,您实际上会"反对Rails".Rails有一套严格的约定,你应该坚持.当你偏离这条道路时,事情会变得混乱.


但是,如果你确实想用脚射击,比喻说,你需要手动定义路线.以下是控制器中七种标准操作的路径:

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"
Run Code Online (Sandbox Code Playgroud)

如你所见,这很难看.但是,如果你真的真的想这样做,那你就是这样做的.