1

到目前为止,我的 routes.rb 文件看起来像这样:

resources :games do
  resources :planets do
    member do
      get 'index' as: :play_game
    end
  end
end

这会创建这些(当我检查 rake 路线时)

play_game_game_planet GET    /games/:game_id/planets/:id/index(.:format) planets#index
         game_planets GET    /games/:game_id/planets(.:format)           planets#index
                      POST   /games/:game_id/planets(.:format)           planets#create
     new_game_planet  GET    /games/:game_id/planets/new(.:format)       planets#new
    edit_game_planet  GET    /games/:game_id/planets/:id/edit(.:format)  planets#edit
         game_planet  GET    /games/:game_id/planets/:id(.:format)       planets#show
                      PATCH  /games/:game_id/planets/:id(.:format)       planets#update
                      PUT    /games/:game_id/planets/:id(.:format)       planets#update
                      DELETE /games/:game_id/planets/:id(.:format)       planets#destroy

但我想要的路径是(类似于第二行)

play_game GET    /games/:game_id/planets(.:format)           planets#index
4

1 回答 1

1

你已经有了game_planets /games/:game_id/planets(.:format) planets#index上面定义的路由——命名路由是game_planets. 所以我假设你想要的是命名路线的不同名称?

如果这就是您所追求的,并且您无法得到其他建议(即其他 Rails 开发人员会想知道为什么非标准命名路由结构),那么您可以这样做:

resources :games do
  resources :planets
end

get 'games/:game_id/planets', 'planets#index', as: 'play_game'

这实质上创建了一个具有特殊命名路由的重复路由。但我建议不要这样做,因为:

  1. 索引操作应该使用复数命名路由(所以至少使用as: 'play_games'
  2. 这不是标准的。命名路由play_game会让我觉得有PlayController一个嵌套Game控制器,这将是一个show需要play传递对象的操作。
于 2013-09-05T23:15:00.150 回答