加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何重命名Rails’map.resources()中的默认标

发布时间:2020-12-16 19:59:53 所属栏目:百科 来源:网络整理
导读:我喜欢Rail的map.resources生成的所有默认路由.但是,有些情况下,我想在路由中使用非数字标识符.例如,如果嵌套路由由用户及其文章组成,那么标准路由可以这样写: map.resources :users,:has_many = [:articles] # = e.g. '/users/:id/articles/:id' 但是,Rail
我喜欢Rail的map.resources生成的所有默认路由.但是,有些情况下,我想在路由中使用非数字标识符.例如,如果嵌套路由由用户及其文章组成,那么标准路由可以这样写:
map.resources :users,:has_many => [:articles] # => e.g. '/users/:id/articles/:id'

但是,Rails生成的默认数字标识符有很多优点/原因.有没有办法将默认值:id参数替换为我选择的另一个规范标识符,而不会为每个标准操作编写自定义路由?说如果我想要一个以下格式的路由:

'/users/:login/articles/:id'

使用map.resources可以实现这种路由吗?

解决方法

从Rails 2.3开始,无法更改参数名称,仍然使用#resources提供的自动路由.

作为解决方法,您可以使用以下路径映射文章:path_prefix和:name_prefix:

map.resources :articles,:path_prefix => "/users/:login",:name_prefix => "user_"

:path_prefix会影响URL,并且:name_prefix会影响生成的命名路由,因此最终会出现以下路由:

user_articles GET    /users/:login/articles(.:format)          {:controller=>"articles",:action=>"index"}
                  POST   /users/:login/articles(.:format)          {:controller=>"articles",:action=>"create"}
 new_user_article GET    /users/:login/articles/new(.:format)      {:controller=>"articles",:action=>"new"}
edit_user_article GET    /users/:login/articles/:id/edit(.:format) {:controller=>"articles",:action=>"edit"}
     user_article GET    /users/:login/articles/:id(.:format)      {:controller=>"articles",:action=>"show"}
                  PUT    /users/:login/articles/:id(.:format)      {:controller=>"articles",:action=>"update"}
                  DELETE /users/:login/articles/:id(.:format)      {:controller=>"articles",:action=>"destroy"}

作为一般的经验法则,我会坚持使用Rails默认约定:user_id,并在您的问题中发布路由.通常理解:id和:user_id不一定意味着“数字标识符” – 它们暗示“资源标识符”,无论如何.通过遵守默认约定,对于在Rails中使用资源路由的任何人,您的代码将更容易理解.

要为资源使用非数字标识符,只需在模型中重新定义#to_param.然后,确保使用您的控制器中的finder,该查找器将通过此标识符(而不是数字ID)找到,如User#find_by_login!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读