Rails哈希具有未知键和强参数

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,而不是:logconfig.action_controller.action_on_unpermitted_parameters你的environment话,记得删除propertiesparams之前调用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)


Chr*_*s W 5

这些答案都不适合我(使用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

您的需求与强参数的目标完全相反,当我们定义强参数时,基本上我们会将即将到来的参数列入白名单。

在您的情况下,我们完全不知道密钥,因此无需在那里进行强参数检查。那会解决你的问题