我发现有几个网站指向使用以下代码添加对自定义参数格式的支持:
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
这里的这个是针对Apple plist格式的,这是我想要做的。但是,使用 Rails 3.2.1 ,开发服务器将无法启动,表示param_parsers
未定义。我不能找到任何关于它被弃用或任何替代使用的文档,只是它确实包含在2.x文档而不是3.x文档中。
在Rails 3中还有其他方法可以支持POST和PUT请求中的自定义参数格式吗?
答案 0 :(得分:1)
params解析移动到Rack中间件。现在是part of 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
第一个变种可能是最干净的。但是你需要知道,最后一个替换中间件声明的人会在那里获胜。