the*_*he_ 5 ruby hash ruby-on-rails ruby-on-rails-4
我有一个rails应用程序,它在一个名为的字段中存储一个序列化哈希properties.
虽然哈希键是未知的,但我不知道如何通过强参数来允许它.
谷歌搜索时,我发现了这个:https://github.com/rails/rails/issues/9454,但我无法弄清楚究竟是什么解决方案.
所以基本上,我的问题是:如何配置强参数以允许具有未知密钥的哈希?
谢谢大家的帮助!
小智 6
我最近有同样的问题,我使用@ fxn的方法从https://github.com/rails/rails/issues/9454解决了它
对于具有propertiesas hash的产品,将其解析为
def product_params
params.require(:product).permit(:title, :description).tap do |whitelisted|
whitelisted[:properties] = params[:product][:properties]
end
end
Run Code Online (Sandbox Code Playgroud)
如果您使用的:raise,而不是:log为config.action_controller.action_on_unpermitted_parameters你的environment话,记得删除properties从params之前调用permit.那么方法就是
def product_params
properties = params[:product].delete(:properties)
params.require(:product).permit(:title, :description).tap do |whitelisted|
whitelisted[:properties] = properties
end
end
Run Code Online (Sandbox Code Playgroud)
这些答案都不适合我(使用Rails 4.2.4),所以我想出了以下解决方法:
def product_params
properties_keys = params[:product][:properties].keys
params.require(:product).permit(:title, :description, properties: properties_keys)
end
希望能帮助别人.
Rag*_*har -3
您的需求与强参数的目标完全相反,当我们定义强参数时,基本上我们会将即将到来的参数列入白名单。
在您的情况下,我们完全不知道密钥,因此无需在那里进行强参数检查。那会解决你的问题。