首页 > 解决方案 > 为什么这两条路线的参数名称不同?

问题描述

我有两条路线要指向同一个控制器操作。

get '/events/:url_token' , to: 'events#show'

get '/tv/events/:url_token', to: 'events#show'

并在我的 EventsContoller 中为显示操作设置事件

@event = Event.find_by(url_token: params['id'])

当我导航到 /events/asdf 时,这很好用,因为参数看起来像

{"id"=>"asdf"}

但是当我导航到 /tv/events/asdf 我得到

{"url_token"=>"hbbnHw"}

我不明白为什么这两个路由的参数名称不同或我应该如何修复。

编辑:我在与事件相关的路线中也有这个:

resources :events do
  member do
    post :addeventgroup
    patch :updateeventtype
    patch :updateeventgroup
    patch :start_event
  end

标签: ruby-on-railsruby

解决方案


resources :events向您的应用程序添加多个路由——其中一个类似于以下模式:

get '/events/:id', to: 'events#show'

当您不想要该路线而是想使用您定义的路线时

get '/events/:url_token' , to: 'events#show'

然后你可以禁用这样生成的路由resources :events

resources(:events, except: :show) do
  member do
    # ...
  end  
end

我建议阅读Rails Guides about Routing

或者,您可以删除此get '/events/:url_token', to: 'events#show'定义并重命名另一个中的参数,如下所示:

get '/tv/events/:id', to: 'events#show'

推荐阅读