6

我有一个 Product 模型,其中包含一个jsonb名为dynamic.

我实际上有 2 条产品记录

产品一:

dynamic = {"name": "super product 1", "description": "lorem ipsum text" }

产品二:

dynamic = {"title": "this is an ebook", "author": "john doe", "creation_date": "2015"}

要编辑每个产品,我需要显示一个表格。对于产品 1,表单将包含 2 个字段(名称和描述),对于产品 2,表单将包含 3 个字段(标题、作者、创作日期)

我已经搜索过,但似乎我找到的所有文章都在谈论如何使用控制台保存或编辑 json 字段,但没有人谈论如何使用表单。

请问有什么帮助吗?谢谢

4

1 回答 1

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

于 2015-04-09T08:49:52.327 回答