Rails 4.1路由路径助手在路径生成中使用了错误的ID

时间:2018-10-01 16:39:56

标签: ruby-on-rails ruby-on-rails-4.1

我正在尝试从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

1 个答案:

答案 0 :(得分:0)

我的猜测是您正在合并参数,即正在合并id键并将id设置为帐户id。试试:

account_facility_report_path( @account, @facility, format: :pdf )