Rails Rails 的 Route 中可否自定义参数形式

ryan · 2013年06月01日 · 最后由 rdongxie 回复于 2014年11月11日 · 3938 次阅读
resources :users do
    resources :collections
end

这样的嵌套 route,在 rake 后会得到 /users/:user_id/collections/:id/users:id/ 我能不能自定义参数形式,希望得到这样的 url

/users/:user_id and /users/:user_id/collections/:collection_id

也就是,不适用自动生成的:id参数,全部自定义,这样在params[:user_id]params[:collection_id]就可以得到,而不用纠结 user controller 和 collection controller 中,为了得到 user 而必须在:user_id:id中切换参数。

好像可以吧,默认最底下的 match 不就是吗?不过就没有默认对应的 path_name 了

其实可以这样子,在 controller 中添加 before_filter

params["#{controller_name.singularize}_id".to_sym] = params[:id] if params[:id]

#1 楼 @shatle controller_name 是一个属性还是一个需要手写的字符串?

#3 楼 @shatle 原来如此,明白了。

#1 楼 @shatle 刚刚接触 ruby,请问:

params["#{controller_name.singularize}_id".to_sym] = params[:id] if params[:id]

这段代码里面的_id 如何理解?

before_filter do
    resource = controller_name.singularize.to_sym
    method = "#{resource}_params"
    params[resource] &&= send(method) if respond_to?(method, true)

同这里_params 相同。谢谢。

#5 楼 @rdongxie

就是字符而已,“user_id”中的“_id”,同理 _params 可能你疑惑的是 “#{resource}_params” 这整个语法吧,其它 就是 字符串内加上变量 resource,

如果 resource = "user", 那么 method = "user_params"

需要 登录 后方可回复, 如果你还没有账号请 注册新账号