是否可以显示带有 jsonb 属性字段的表单

Is it possible to show a form with fields for the jsonb properties

我有一个产品模型,其中包含一个名为 dynamicjsonb 字段。

我实际上有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 字段之外的其他数据打开以被覆盖。