我意识到没有太多关于如何使用rails表单来存储和检索JSON类型数据的信息。我目前面临以下问题:
我有一个在JSON中创建嵌套结构的表单:
= form_for(@car) do |cf|
= cf.fields_for :locations do | locations_f |
= locations_f.fields_for :primary_location do | primary_location_f |
.sm-col.md-col.sm-col-6.px2
label.inline-block.mb1 District
= primary_location_f.text_field :district
.sm-col.md-col.sm-col-6.px2
label.inline-block.mb1 Street
= primary_location_f.text_field :street
它将生成输入HTML标记:
<input name="car[locations][primary_location][district]">
<input name="car[locations][primary_location][street]">
我可以在执行params.permit
后将其保留在数据库中:
params.require(:car).permit([
locations:[primary_location:[:street, :district]]
])
我还在模型
中创建store_accessor
store_accessor :locations, :primary_location, :other_locations
但是,在我持久保存数据后,我希望它显示在text_field
数据库中已经存在的内容中。我尝试做类似的事情:
= primary_location_f.text_field :district, value: @car.locations['primary_location']['district']
但是,它会遇到NilClass错误,因为有时@car.locations['primary_location']
可能为零,当我调用@car.locations['primary_location']['district']
时会出现错误。
我想知道存储和检索JSON数据类型的最佳方法是什么。嵌套JSON时有什么好方法。
由于
答案 0 :(得分:1)
然而,它会遇到NilClass错误,因为有时@ car.locations ['primary_location']可能是nil,当我调用@ car.locations ['primary_location'] ['district']时会出现错误。
使用.try()
方法。
@car.locations.try(:[],:primary_location).try(:[], :district)
我想知道存储和检索JSON数据类型的最佳方法是什么。当JSON嵌套时,有什么好方法。
我更喜欢内置JSON store
。与你正在使用的相似。