我可以更改Rails 3中路由生成的默认参数':id'吗?

时间:2013-06-01 11:24:32

标签: ruby-on-rails routes

我检查了很多类似的问题。大多数答案显示覆盖to_param方法。但这不是我想要的。

我们说resources: users

rake routes

edit_user GET    /users/:id/edit(.:format)              users#edit
user GET         /users/:id(.:format)                   users#show
PUT              /users/:id(.:format)                   users#update
DELETE           /users/:id(.:format)   

然后回到我的UsersController,我可以从id获取params[:id]参数。但这不是我想要的,我希望它是params[:user_id]。根据上面的路线,这是不可能的。因为路线中没有:user_id参数。有什么方法可以提供帮助吗?

2 个答案:

答案 0 :(得分:1)

一般来说,如果你同意遵守其惯例,Rails会让你的生活变得轻松,否则很难。所以我建议单独留下这个。

但是如果你真的希望param是:user_id - 说出于可读性原因 - 你可以在before_filter中“别名”它:

params[:user_id] = params[:id]

希望有所帮助!

答案 1 :(得分:1)

您可以使用:path_prefix对默认设置执行某些操作,如果找到方法,我会进行播放和更新。

如果需要,您可以手动执行此操作,方法是在路线中定义单个匹配项,而不是使用资源生成器:

match 'users/:user_id/edit' => 'users#edit'

这将解析网址/users/1/edit,如此:

Started GET "/users/1/edit" 
Processing by UsersController#edit as HTML
  Parameters: {"user_id"=>"1"}