【问题标题】:Why is the param name different betwee these two routes?为什么这两条路线的参数名称不同?
【发布时间】:2019-02-10 07:23:02
【问题描述】:

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

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

【问题讨论】:

  • 你能显示更多代码吗?喜欢完整的routes.rb 以及如何导航到网址?你是用link_tobutton_to手动href还是手动输入
  • 您可能在routes.rb 中定义了另一个路由,它已经处理了events 路由。也许是resources :events?请出示您的routes.rb
  • @spickermann 是的,我添加了对与事件相关的路线中的内容的编辑...
  • @buncis 我正在手动访问网址。我从我的 routes.rb 中添加了更多内容
  • 为什么要让两条路由指向同一个 URL?为什么不使用相同的 URL?你想达到什么目标?

标签: ruby-on-rails ruby


【解决方案1】:

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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多