我有一个名为dynamic的jsonb字段的Product模型.
我实际上有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个字段(title,author,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字段之外的其他数据被覆盖.