是否可以显示带有 jsonb 属性字段的表单
Is it possible to show a form with fields for the jsonb properties
我有一个产品模型,其中包含一个名为 dynamic
的 jsonb
字段。
我实际上有2条产品记录
产品 1:
dynamic = {"name": "super product 1", "description": "lorem ipsum text" }
产品 2 :
dynamic = {"title": "this is an ebook", "author": "john doe", "creation_date": "2015"}
要编辑每个产品,我需要显示一个表格。对于 产品 1,表单将包含 2 个字段(名称和描述),对于 产品 2,表单将包含 3 个字段(标题、作者) ,creation_date)
我已经搜索过了,但似乎我找到的所有文章都在谈论如何使用控制台保存或编辑 json 字段,但没有人谈论如何使用表单。
有什么帮助吗?谢谢
如果您使用的是 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 字段之外的其他数据打开以被覆盖。
我有一个产品模型,其中包含一个名为 dynamic
的 jsonb
字段。
我实际上有2条产品记录
产品 1:
dynamic = {"name": "super product 1", "description": "lorem ipsum text" }
产品 2 :
dynamic = {"title": "this is an ebook", "author": "john doe", "creation_date": "2015"}
要编辑每个产品,我需要显示一个表格。对于 产品 1,表单将包含 2 个字段(名称和描述),对于 产品 2,表单将包含 3 个字段(标题、作者) ,creation_date)
我已经搜索过了,但似乎我找到的所有文章都在谈论如何使用控制台保存或编辑 json 字段,但没有人谈论如何使用表单。
有什么帮助吗?谢谢
如果您使用的是 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 字段之外的其他数据打开以被覆盖。