我需要使用rails使用的内部机制将字符串转换为适合创建具有嵌套属性的对象构建的参数哈希。我无法找到请求rails的生命周期中的哪个实际上准备了params [] hash。
字符串如下:
"foo[butter]=fat&foo[cheese]=cheddar&bar[fork]=pointy&bar[knife]=sharp"
为了给出一些上下文,上面的字符串是通过对我的应用程序的API调用从加密的请求中提取的。这就是为什么它一旦解密就会以这种形式出现。
def create
decrypted = decrypt(params[:q])
Object.create(magically_convert_to_param_hash(decrypted))
end
我意识到我可以手动解析这个字符串并将其转换为所需的哈希值,但考虑到代码存在于已经存在的框架中,它似乎有点潮湿。
答案 0 :(得分:5)
像这样使用CGI::parse:
params_in_url = "foo[butter]=fat&foo[cheese]=cheddar&bar[fork]=pointy&bar[knife]=sharp"
params_hash = CGI::parse(params_in_url)
params_hash = Rack::Utils.parse_query(params_in_url)
答案 1 :(得分:3)
从Rails 4开始,你也可以这样做:
raw_parameters = {
:foo => {
:butter => "fat",
:cheese => "cheddar",
},
:bar => {
:fork => "pointy",
:knife => "sharp",
}
}
params = ActionController::Parameters.new(raw_parameters)
然后你可以这样要求和允许
params.require(:foo).permit(:butter, :cheese)
params.require(:bar).permit(:fork, :knife)