【发布时间】: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