未能尝试在嵌套路由中指定param名称

时间:2016-12-01 22:00:38

标签: ruby-on-rails ruby

考虑这条路线设置:

  resources :potatos do
    get "foo", to: "foo#foo"
  end

这会产生这样的节目路线:

/potatos/:id

然而,生成的foo路径不同:

/potatos/:potato_id/foo

我希望foo路由使用:id param,而不是:potato_id。这是因为我有现有的(共享)控制器逻辑,它需要:id param

根据react-numeric-input的建议,我尝试resources(:potatos, param: :id),但结果相同。

1 个答案:

答案 0 :(得分:1)

因为您只是在寻找各种方法来实现这一目标。我以为我会根据评论开始回答,以显示我尝试过的各种方式。

所需格式为:

"/potatos/:id/foo" # :id refers to potato id

资源块之外

如果您在routes.rb中不需要嵌套路由,则可以实现这可以通过在资源块之外创建自定义路由来实现。

# routes.rb
# Custom routes    
get '/potatos/:id/foo', to: 'foo#foo'
# Resources
resources :potatos

Rake路线显示:

GET potatos/:id/foo(.:format) foo#foo

我个人喜欢这种格式,因为它让我看到了什么是典型的资源以及我添加的内容。也就是说,我知道OP需要遵循预定义的样式指南, 需要在资源块中 (基于评论)。

资源块内部

如果您需要在资源块内部完成此操作,到目前为止,我发现在不同的控制器#动作中添加了member route,可以在一个简单的应用程序中为我工作。

  resources :potatos do
    member do
      get "foo", to: "foo#foo"
    end
  end

如果您只有一名成员,则为简化版。

  resources :potatos do
      get "foo", to: "foo#foo", on: :member
  end

在我搜索路线时都显示以下内容:

foo_potatos GET /potatos/:id/foo(.:format) foo#foo

然而, OP在尝试此格式 时收到错误,但在我的测试中它运行正常。