【发布时间】:2014-07-13 12:22:58
【问题描述】:
当控制器收到请求时修改params包含MessagePack,我写了一些这样的代码:
Mime::Type.register "application/x-mpac", :mpac
ActionDispatch::ParamsParser::DEFAULT_PARSERS.merge!(Mime::MPAC =>
lambda do |contents|
data = MessagePack.unpack(contents['data'])
data.with_indifferent_access
end
)
# Or
ActionController::Base.param_parsers[Mime::Type.lookup('application/x-mpac')] = lambda do |contents|
data = MessagePack.unpack(contents['data'])
data.with_indifferent_access
end
但这在 Rails 4.1.4 中不起作用
作为另一种方法,可以使用自定义中间件。但自定义中间件在 RSpec 控制器测试中不起作用。
就没有别的办法了吗?
【问题讨论】:
-
“不起作用”是什么意思?请提供语料库、错误和预期输出。
-
例如发送带有参数
{"data"=>"\x83\xA4name\xA6user18\xA8password\xACpassword1234\xACmachine_name\xABThe Machine"}的请求和一个控制器方法,该方法期望提供解码的参数,就像{"name"=>"user18", "password"=>"password1234", "machine_name"=>"The Machine"}。但实际上这个控制器方法被赋予了{"data"=>"\x83\xA4name\xA6user18\xA8password\xACpassword1234\xACmachine_name\xABThe Machine"}。我想知道一种中断 ActionDispatch::ParamsParser 的方法
标签: ruby-on-rails mime-types ruby-on-rails-4.1