Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 ActionController::Base.param_解析器替代方案_Ruby On Rails - Fatal编程技术网

Ruby on rails ActionController::Base.param_解析器替代方案

Ruby on rails ActionController::Base.param_解析器替代方案,ruby-on-rails,Ruby On Rails,我发现一些网站指向使用以下代码添加对自定义参数格式的支持: ActionController::Base.param_parsers[Mime::PLIST] = lambda do |body| str = StringIO.new(body) plist = CFPropertyList::List.new({:data => str.string}) CFPropertyList.native_types(plist.value) end 这里的这个是苹果plist格式

我发现一些网站指向使用以下代码添加对自定义参数格式的支持:

ActionController::Base.param_parsers[Mime::PLIST] = lambda do |body|
  str = StringIO.new(body)
  plist = CFPropertyList::List.new({:data => str.string})
  CFPropertyList.native_types(plist.value)
end
这里的这个是苹果plist格式,这就是我想要做的。但是,使用Rails 3.2.1,开发服务器不会启动,因为
param_解析器
未定义。我找不到任何不推荐使用的文档或任何替代使用的文档,只是它确实包含在2.x文档中,而不是3.x文档中


Rails 3中是否有其他方法支持POST和PUT请求中的自定义参数格式?

参数解析已移动到机架中间件。现在是

要注册新的解析器,您可以重新声明中间件的使用,如下所示:

MyRailsApp::Application.config.middleware.delete "ActionDispatch::ParamsParser"
MyRailsApp::Application.config.middleware.use(ActionDispatch::ParamsParser, {
  Mime::PLIST => lambda do |body|
    str = StringIO.new(body)
    plist = CFPropertyList::List.new({:data => str.string})
    CFPropertyList.native_types(plist.value)
  end
})
或者您可以像这样更改包含默认解析器的常量

ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime::PLIST] = lambda do |body|
  str = StringIO.new(body)
  plist = CFPropertyList::List.new({:data => str.string})
  CFPropertyList.native_types(plist.value)
end
第一种可能是最干净的。但是您需要知道,最后一个替换中间件声明的声明将在这里获胜