如何更改 Rails 路由上的自动命名参数 ID?

How to change automatic named parameter id on Rails route?

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

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

Rails 自动将参数 ID 命名为 :conference_id,但我希望改用 :id

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

有办法吗?谢谢。

你可以这样做:

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

您可以根据 this guide's section 使用 member 选项来改进 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

有了这个,您的控制器中就会有参数[:id]。顺便说一句,资源的嵌套深度不应超过 1 层。查看 2.7.1 Limits to Nesting