0

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

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_parsers是未定义的。我无法找到任何关于它被弃用的文档或任何替代使用,只是它确实包含在 2.x 文档中而不是 3.x 文档中。

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

4

1 回答 1

1

参数解析移至 Rack 中间件。它现在是 ActionDispatch的一部分。

要注册新的解析器,您可以像这样重新声明中间件的使用:

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

第一个变体可能是最干净的。但是您需要注意,替换中间件声明的最后一个在那里获胜。

于 2012-04-13T21:58:44.697 回答