我有一个名为jsonb
的{{1}}字段的产品型号。
我实际上有2个产品记录
产品1:
dynamic
产品2:
dynamic = {"name": "super product 1", "description": "lorem ipsum text" }
要编辑每个产品,我需要显示一个表单。对于产品1 ,表单将包含2个字段(名称和描述),对于产品2 ,表单将包含3个字段(title,author,creation_date)
我已经搜索了但似乎我发现的所有文章都谈到了如何使用控制台来保存或编辑json字段,但是没有人讨论如何使用表单。
有什么帮助吗?感谢
答案 0 :(得分:6)
如果你使用的是simple_form,你可以这样做:
f.simple_fields_for :dynamic do |dynamic_f|
@product.dynamic.each do |k,v|
dynamic_f.input k.to_sym
end
end
不要忘记允许控制器中的参数如下:
params.require(:product).permit(dynamic: [:name, :description, :title, :author, :creation_date]])
将所需的特定参数列入白名单总是好的做法,但如果你想让动态内的所有内容都可以尝试这样的话:
params.require(:product)permit( **permitted paramters in here** ).tap do |whitelisted|
whitelisted[:dynamic] = params[:product][:dynamic] if params[:product][:dynamic]
end
或者允许使用产品型号的所有内容:
params.require(:product).permit!
这不建议使用,因为它会使您在json字段之外的其他数据被覆盖。