ruby-on-rails - Rails 4.1路由路径助手在路径生成中使用不正确的ID
问题描述
我正在从 Rails 4.0.13 升级到 Rails 4.1.16... 在前往 Rails 5 的途中。
@account
并且@facility
是 ActiveRecord 模型实例,在控制器中成功检索FacilitiesController
@account = #<Account id: 1863133034>
@facility = #<Facility id: 2035637533>
routes.rb
看起来像这样:
resources :accounts do
resources :facilities do
get :report
end
end
在请求期间在 Rails 4.1.16 控制台中:
> request.env["REQUEST_PATH"]
=> "/accounts/1863133034/facilities/2035637533"
> params
{"action"=>"show", "controller"=>"facilities", "account_id"=>"1863133034", "id"=>"2035637533"}
> account_facility_report_path( @account, @facility, {})
=> "/accounts/1863133034/facilities/2035637533/report"
> account_facility_report_path( @account, @facility, params.merge( format: :pdf ) )
=> "/accounts/1863133034/facilities/1863133034/report.pdf?id=2035637533" # why different facility ID??
现在生成的路径中的设施 ID 不同。应该是2035637533
,就像在_path
最后一个请求之前的请求中一样。
_path
由于第三个参数,有人可以帮助我理解助手的行为差异吗?
在 Rails 4.0 中,我没有注意到这种行为。路径按预期生成,路径中的设施 ID 设置为2035637533
。
解决方案
我的猜测是您正在合并参数,即合并 id 键并将 id 设置为帐户 id。尝试:
account_facility_report_path( @account, @facility, format: :pdf )
推荐阅读
- laravel - 我的守护进程应该有多少个进程?
- ibm-watson - 获取 IBM Discovery 的文档名称
- python - /products/ 处的 NoReverseMatch
- java - 使用 Wss4jSecurityInterceptor 会引发 WRONG_DOCUMENT_ERR:一个节点在与创建它的文档不同的文档中使用
- powerbi - Power Bi 嵌入参数 - 列名中的空格
- mysql - MySQL 5.6 - 即使使用 ALGORITHM=inplace 也会锁定表
- c# - Microsoft 加载项在共享文件夹中添加重复邮件
- optaplanner - Optaplanner 与客户的硬链接仓库
- db2 - DB2 恢复、前滚问题
- ruby - 带有字符串键的哈希的安全导航运算符