我检查了很多类似的问题。大多数答案显示覆盖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
参数。有什么方法可以提供帮助吗?
答案 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"}