谷歌搜索,找到了很多潜在的解决方案,以正确处理它,最终得到以下,哪些工作
def item_params
load_params = params.require(:item).permit(
:title,
:content
)
load_params[:meta] = params[:item][:meta] if params[:item][:meta]
load_params.permit!
end
使用此类有效负载(查看控制台):
{
"item" => {
"title"=>"abc",
"meta"=>{
"fontcolor"=>"xyz",
}
}
}
日志仍显示该字段未被允许:
Unpermitted parameter: :meta
不阻塞,它确实传递了这些参数并正确保存,即使被警告过。
没有在相关列上使用序列化或任何序列化程序,因为它没有它的预期工作(与大量的帖子谈论json列和序列化,现在似乎不像现在所需要的那样)< / p>
此解决方案不适合我,同样的警告,但元参数被阻止:
def item_params
meta_keys = params[:item][:meta].keys
params.require(:item).permit(:title, meta: meta_keys)
end
由于这看起来有点随意,我对使用什么以及如何使用它做出最终决定感到非常不舒服;所以,如果有任何自信的建议,那么很多。
答案 0 :(得分:2)
强参数的重点不允许任意参数。我建议尝试将您想要允许的所有密钥列入白名单,并且仅允许这些密钥。
但是要回答您的问题,如果您想要允许动态密钥,则应该执行此操作而不记录Unpermitted parameter:
def item_params
meta_keys = params.require(:item).fetch(:meta, {}).keys
params.require(:item).permit(:title,:meta => meta_keys)
end