ActionController::Parameters to_query 升级到 Rails 5.0 后失败

ActionController::Parameters to_query fails after upgrading to Rails 5.0

在Rails 4.2.4中,ActionController::Parameters.new(pos: 'xyz', foo: 'bar').to_query returns "foo=bar&pos=xyz".

升级到 Rails 5.0 后,我得到这个:

ArgumentError: wrong number of arguments (given 0, expected 1)
from /Users/Lars/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.rc2/lib/active_support/core_ext/object/to_query.rb:11:in `to_query'
from (irb):7
from /Users/Lars/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.rc2/lib/rails/commands/console.rb:65:in `start'
from /Users/Lars/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.rc2/lib/rails/commands/console_helper.rb:9:in `start'
from /Users/Lars/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.rc2/lib/rails/commands/commands_tasks.rb:78:in `console'
from /Users/Lars/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.rc2/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
from /Users/Lars/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/railties-5.0.0.rc2/lib/rails/commands.rb:18:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'

但是 to_query 的文档清楚地表明 to_query 的参数(仍然)是可选的:http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-to_query

有什么想法吗?

您正在查看 Rails 5.1.1 的文档,可以找到 5.0.0 的文档 here

在 5.0.0.rc2 中,#to_query 方法来自 here,确实需要一个参数(键)。

这在版本之间发生了变化,自 Rails 5.0.3 起不需要参数。我建议只更新您的 Rails 版本。如果那不是一个选项,这可能对您有用:

Rack::Utils.build_query(ActionController::Parameters.new(pos: 'xyz', foo: 'bar')) # => "pos=xyz&foo=bar"