【问题标题】:Using a has_many-equivalent in postgresql jsonb fields in rails and nested values在rails和嵌套值的postgresql jsonb字段中使用has_many-equivalent
【发布时间】:2015-10-09 14:09:34
【问题描述】:

我有各种与基于 STI 的网络设备相对应的模型,它们之间只有几个字段不同,我将它们存储在 jsonb 字段中。

另一个 jsonb 字段 (network_data) 以 json 格式存储一组网络信息。以下是该字段的内容:

[{"ip"=>"192.168.1.1","ip_type"=>"1", "services"=>{"ns"=>"0",..., "FIREWALL"=>"1", "DNSresolver"=>"1"},
"network_device_destination_id"=>"9"},{"ip"=>"192.168.1.2","ip_type"=>"0","services"=>{"ns"=>"0","BGP"=>"0",
 ...(other services)},"network_device_destination_id"=>"8"}]

使用 STI 的主要原因是网络设备之间的多态关联(每个 json 记录中的键 'network_device_destination_id')。

我使用带有 gem 的 activerecord 存储直接存储在 json 中而不是数组中的特定字段https://github.com/devmynd/jsonb_accessor 然后,对于这个存储属性,我可以轻松地使用简单的形式作为普通属性。

但是对于数组中的元素,处理验证,写表单真的很棘手......

所以我问自己是否可以为网络记录创建一个类,它有自己的规则、验证和访问器,并使用嵌套属性数组之王,就像我们对 has_many 关系所做的那样。

我们会用这个 gem 做一些事情: https://github.com/lailsonbm/awesome_nested_fields

感谢您的宝贵建议!

PH

【问题讨论】:

    标签: arrays simple-form nested-attributes ruby-on-rails-4.2 jsonb


    【解决方案1】:

    我目前正在尝试做同样的事情(我认为随着时间的推移会有更多的人),我发现的唯一真正的参考是 Seth Faxon 在他的博客上。 on his blog

    他通过在父模型中创建一个子类来对 has_many 进行变体,然后将 json/jsonb 的每一行作为单独的关联对象 Parent::Child 访问。

    我不确定它作为多态关联的替代品会有多好,但我会试一试。

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      相关资源
      最近更新 更多