Ruby on rails 在rails表单中存储和检索postgres嵌套的JSONB数据类型

Ruby on rails 在rails表单中存储和检索postgres嵌套的JSONB数据类型,ruby-on-rails,json,forms,postgresql,jsonb,Ruby On Rails,Json,Forms,Postgresql,Jsonb,我意识到关于如何使用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

我意识到关于如何使用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标记,如下所示:

在执行
params.permit
后,我能够将其保存在数据库中:

params.require(:car).permit([
    locations:[primary_location:[:street, :district]]
])
我还在模型中创建
store\u accessor

store_accessor :locations, :primary_location, :other_locations
但是,在我持久化数据之后,我希望它显示在
text\u字段中
数据库中已经持久化的内容。我试着做一些事情,比如:

= primary_location_f.text_field :district, value: @car.locations['primary_location']['district']
但是,它会遇到NilClass错误,因为有时
@car.locations['primary\u location']
可能为零,当我调用
@car.locations['primary\u location']['district']
时会出现错误

我想知道存储和检索JSON数据类型的最佳方法是什么。当JSON被嵌套时,什么是好方法

谢谢

但是,它会遇到NilClass错误,因为有时@car.locations['primary_location']可能为零,当我调用@car.locations['primary_location']['district']时会出现错误

使用方法

我想知道存储和检索JSON数据类型的最佳方法是什么。当JSON被嵌套时,什么是好方法


我更喜欢内置JSON
store
。与您正在使用的类似。

您好,您将如何使用store来实现它?它如何将数据检索到表单中?表单只需调用字段的访问器,因此只需添加相应的
store\u访问器即可。对于级别超过1的json,我会在视图中编写循环。谢谢。你能写一个例子来帮助我更好地理解吗?谢谢
@car.locations.try(:[],:primary_location).try(:[], :district)