Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActionDispatch::升级到Rails 5后更换ParamSpaser_Ruby On Rails_Ruby_Actiondispatch - Fatal编程技术网

Ruby on rails ActionDispatch::升级到Rails 5后更换ParamSpaser

Ruby on rails ActionDispatch::升级到Rails 5后更换ParamSpaser,ruby-on-rails,ruby,actiondispatch,Ruby On Rails,Ruby,Actiondispatch,将应用程序从Rails 4.2.9迁移到5.2.1 这是最新一期: $ rails console /Users/meltemi/rails/myapp/config/initializers/disable_xml_params.rb:3:in `<top (required)>': uninitialized constant ActionDispatch::ParamsParser (NameError) from /Users/meltemi/.rbenv/versi

将应用程序从Rails 4.2.9迁移到5.2.1

这是最新一期:

$ rails console
/Users/meltemi/rails/myapp/config/initializers/disable_xml_params.rb:3:in `<top (required)>': uninitialized constant ActionDispatch::ParamsParser (NameError)
    from /Users/meltemi/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/railties-5.2.1/lib/rails/engine.rb:657:in `block in load_config_initializer'
    from /Users/meltemi/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/activesupport-5.2.1/lib/active_support/notifications.rb:170:in `instrument'
    from /Users/meltemi/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/railties-5.2.1/lib/rails/engine.rb:656:in `load_config_initializer'
说:

ActionDispatch::ParamSpaser已弃用,并已从中间件堆栈中删除。要配置参数解析器,请使用ActionDispatch::Request.parameter_parsers=。(承诺,承诺)

因此,我尝试了以下方法:

ActionDispatch::Request.parameter_parsers.delete(Mime::XML)
但这会导致更多的错误:

$ rails console
/Users/meltemi/rails/myapp/config/initializers/disable_xml_params.rb:3:in `<top (required)>': uninitialized constant Mime::XML (NameError)
    from /Users/meltemi/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/railties-5.2.1/lib/rails/engine.rb:657:in `block in load_config_initializer'
    from /Users/meltemi/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/activesupport-5.2.1/lib/active_support/notifications.rb:170:in `instrument'
    from /Users/meltemi/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/railties-5.2.1/lib/rails/engine.rb:656:in `load_config_initializer'
$rails控制台
/Users/meltemi/rails/myapp/config/initializers/disable_xml_params.rb:3:in`':未初始化常量Mime::xml(NameError)
来自/Users/meltemi/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/railties-5.2.1/lib/rails/engine.rb:657:“加载中的块配置\初始值设定项”
来自/Users/meltemi/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/activesupport-5.2.1/lib/active\u support/notifications.rb:170:在“仪器”中
来自/Users/meltemi/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/railties-5.2.1/lib/rails/engine.rb:656:“加载配置\初始值设定项”

是否有更好的方法调用该对象的.delete?

您必须从
参数解析器中获取现有值,根据需要对其进行修改,然后将值重置为修改后的值。从:

参数\u解析器=(解析器)

为给定MIME类型配置参数解析器

它接受一个散列,其中键是MIME类型的符号,值是proc

在您的特定情况下,您应该查看
original_parsers
中的解析器,以查看是否有任何内容需要删除。在我手边有一个简单的Rails 5应用程序上,我仅有的值是:

=> {
    :json => #<Proc:0x00007fe818fc6fb8@/Users/foo/.rvm/gems/ruby-2.6.0-preview2/gems/actionpack-5.2.1/lib/action_dispatch/http/parameters.rb:11 (lambda)>
}
您可以找到其他有用的信息

original_parsers = ActionDispatch::Request.parameter_parsers
xml_parser = -> (raw_post) { Hash.from_xml(raw_post) || {} }
new_parsers = original_parsers.merge(xml: xml_parser)
ActionDispatch::Request.parameter_parsers = new_parsers
=> {
    :json => #<Proc:0x00007fe818fc6fb8@/Users/foo/.rvm/gems/ruby-2.6.0-preview2/gems/actionpack-5.2.1/lib/action_dispatch/http/parameters.rb:11 (lambda)>
}
ActionDispatch::Request.parameter_parsers = ActionDispatch::Request.parameter_parsers.except(:json)