如何在Rails路由上更改自动命名参数id?

时间:2016-12-26 17:42:33

标签: ruby-on-rails-5

我的路线文件有方法完成的定义:

resources :disputes do
  scope module: :disputes do
    resources :conferences, shallow: true do
      put :finish
    end
  end
end

Rails会自动将名称:conference_id的参数ID设置为,但我希望改为使用:id

conference_finish PUT      /conferences/:conference_id/finish(.:format) disputes/conferences#finish {:format=>:json}

有办法做到这一点吗?感谢。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

put "conferences/:something/finish", to: "disputes/conferences#finish"

答案 1 :(得分:1)

您可以根据this guide's section使用成员选项来改进Gabriel的答案(我不知道它是否适用于您的情况):

resources :disputes do
  scope module: :disputes do
    resources :conferences, shallow: true do
      member do
        put :finish
      end          
    end
  end
end

您也可以使用一种方式:

resources :disputes do
  scope module: :disputes do
    resources :conferences, shallow: true do
      put :finish, on: :member
    end
  end
end

这样你的控制器就会有params [:id]。顺便说一句,资源永远不应该嵌套超过1级。查看2.7.1 Limits to Nesting