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
第一种可能是最干净的。但是您需要知道,最后一个替换中间件声明的声明将在这里获胜