如何重命名Rails的map.resources()中的默认标识符参数“id”?

2024-02-29

我喜欢 Rail 生成的所有默认路线地图资源。但是,在某些情况下,我想在路线中使用非数字标识符。例如,如果有一个由用户及其文章组成的嵌套路由,则标准路由可以写成这样:

map.resources :users, :has_many => [:articles] # => e.g. '/users/:id/articles/:id'

然而,不使用 Rails 生成的默认数字标识符有很多优点/原因。有没有办法将默认的 :id 参数替换为我选择的另一个规范标识符,而不会导致为每个标准操作编写自定义路由?假设我想要以下格式的路线:

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

这种路线可以使用实现吗地图资源?


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

作为解决方法,您可以映射articles with a :path_prefix and :name_prefix:

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

The :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 and :user_id不一定意味着“数字标识符”——它们意味着“资源标识符”,无论它是什么。通过坚持默认约定,您的代码对于在 Rails 中使用资源路由的任何人来说都将更容易理解。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何重命名Rails的map.resources()中的默认标识符参数“id”? 的相关文章

  • Rails minitest,数据库清理器如何将 use_transactional_fixtures = false

    我想在 ministest 中禁用 use transactional fixtures false 以捕获 after commit 回调 我应该设置什么以及在哪里设置 你有几个选择 一种是创建一个没有事务固定装置的测试 并希望对测试数据
  • 传递给命令 WPF 的多个参数[重复]

    这个问题在这里已经有答案了 我有以下层次结构 abstract class TicketBase public DateTime PublishedDate get set class TicketTypeA TicketBase publ
  • 在 debian Squeeze 上安装 RoR

    有什么方法可以在我的 debian squeeze 上安装 Ruby 1 9 2 或 1 8 7 Rails 3 吗 您可能不想在生产计算机上使用 RVM 它的 PATH 魔力会在不明显的地方 例如 cron 作业 被破坏 然后你就会陷入困
  • 如何使用 Rails 应用程序中的 s3 在存储桶之间复制文件?

    我目前正在开发一个 Rails 应用程序 尝试将视频从 s3 中的一个存储桶复制 移动到另一个存储桶 但是我在 Rails 应用程序上不断收到代理错误 502 在杂种日志中 它显示 无法分配内存 一旦发生此错误 应用程序就会终止 我们必须重
  • 如何使用 RSpec 检查 JSON 响应?

    我的控制器中有以下代码 format json render json gt flashcard gt flashcard lesson gt lesson success gt true 在我的 RSpec 控制器测试中 我想验证特定场景
  • 如何检查水豚中的复选框?

    我正在使用 Rspec 和水豚 我怎样才能写一个步骤来检查checkbox 我试过了check按价值但它找不到我的checkbox 我不知道该怎么做 因为我实际上有相同的 ID 但值不同 这是代码
  • Ruby on Rails 最酷的功能是什么,为什么选择它? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我问这个问题之前 我浏览了 SO 上 Ruby on Rails 的搜索结果 找不到太多 但以下 在此页面上找到 https stackove
  • 如何在rails中使用npm包?

    我正在尝试使用王牌编辑 https github com ajaxorg ace在我的 Ruby on Rails 应用程序中 大部分视图由 React 组件组成 我正在使用反应轨道宝石 https github com reactjs r
  • SqlCommand 参数与 String.Format [重复]

    这个问题在这里已经有答案了 我一直在互联网上搜索 但似乎找不到任何可以解释我的问题的内容 可能是我没有使用正确的搜索字符串 所以我在这里发帖希望有人可以帮助我有了这个 我的程序是使用Visual Studio 2010用C 编写的 我注意到
  • ruby on Rails,会话过期通知

    我正在使用 ruby 1 9 3 和 Rails 3 2 我的实际会话处理如下所示 会话助手 def sign in user cookies remember token value user remember token expires
  • 如何从詹金斯管道获取所有参数(参数化构建)?

    我正在较新版本的 jenkins 中构建一个参数化管道作业 在较旧版本的 jenkins 中 我使用 getbinding getVariables 来检索所有参数 但较新的版本它返回空值 如何在新版本的詹金斯中检索参数 全部 您可以使用
  • Eventmachine start_tcp_server 无接受器 - 端口正在使用或需要 root 权限(运行时错误)

    我已经 3 天无法运行本地服务器了 重新启动我的计算机没有帮助 有几次 在反复尝试大约 40 50 次之后 它随机地起作用了 我不明白为什么 我尝试过一次不同的端口并且有效 但从那以后 没有端口有效 每次我尝试运行我的 Rails 服务器时
  • Laravel 5 - URL 查询字符串的 NGINX 服务器配置问题

    Laravel 没有从 URL 查询字符串接收任何 GET 变量 GET 和 Input all 为空 Example example app ex login php country US country US 从未出现在我的 GET 变
  • 设备注册控制器获取零资源的自定义操作

    基本上我想要有两个单独的操作来更改密码和更改电子邮件 而不是只有一个 我已经更新了我的路由以指向继承自 Devise RegistrationsController 的新控制器 我的路线 rb devise for users contro
  • 自定义变形在rails3上不起作用?

    我正在使用 Rails 3 0 1 并在initializers inflections rb 中有以下代码 ActiveSupport Inflector inflections do inflect inflect irregular
  • Twitter Bootstrap 中下拉链接的模态

    我正在尝试从下拉菜单中的链接进行模式启动 该模式似乎已启动 网站变为灰色 但看不到 来自不在下拉列表中的常规链接的模态工作得很好 我对 jquery 进行了愚弄 但由于我是 jquery 的新手 所以没有任何结果 这是我的网站代码
  • 带有附加参数的redirect_to

    我是一个菜鸟 redirect to users url notice Succeed p p 然后我添加一个message它失败了 redirect to users url notice Succeed message test p p
  • save_and_open_page 已停止提供我的 CSS

    我的测试设置工作得很好 每当我打电话时 都能提供正确格式的 css 页面save and open page从测试中 然后 我设置了一些 javascript 测试 并对我的设置进行了一些更改 抱歉 我无法详细说明所有内容 我没有足够详细地
  • RSpec 请求规范发布一个空数组

    我目前正在 Rails 中开发 API 端点 如果我需要的数据无效 我想确保端点响应具有正确的错误状态 我需要一个 id 数组 无效值之一是空数组 Valid vendor district ids 2 4 5 6 Invalid vend
  • 回滚后是否应该删除迁移

    我对 ruby 和 Rails 相当陌生 刚刚开始了解迁移 我的问题是回滚后删除迁移的最佳实践或正确时间是什么 到目前为止 我读到的内容是回滚后是否删除迁移的观点问题 但是在团队中工作时删除迁移是否有任何重大影响 以及保留迁移文件相对于删除

随机推荐