Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在rails和嵌套值中的postgresql jsonb字段中使用has_多个等效项_Arrays_Simple Form_Nested Attributes_Ruby On Rails 4.2_Jsonb - Fatal编程技术网

Arrays 在rails和嵌套值中的postgresql jsonb字段中使用has_多个等效项

Arrays 在rails和嵌套值中的postgresql jsonb字段中使用has_多个等效项,arrays,simple-form,nested-attributes,ruby-on-rails-4.2,jsonb,Arrays,Simple Form,Nested Attributes,Ruby On Rails 4.2,Jsonb,我有各种与基于STI的网络设备相对应的模型,它们之间只有几个字段不同,我将这些字段存储在jsonb字段中 另一个jsonb字段(network_data)以json格式存储网络信息数组。以下是此字段的内容: [{"ip"=>"192.168.1.1","ip_type"=>"1", "services"=>{"ns"=>"0",..., "FIREWALL"=>"1", "DNSresolver"=>"1"}, "network_device_destinat

我有各种与基于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\u device\u destination\u id”)

我将activerecord存储与gem一起用于直接存储在json中而不是数组中的特定字段 然后,对于这个故事化的属性,我可以像使用普通属性一样轻松地使用简单的形式

但是对于数组中的元素,处理验证、编写表单是非常棘手的

所以我问自己,是否有可能为网络记录创建一个类,拥有自己的规则、验证和访问器,并使用嵌套的属性数组,就像我们处理has\u many关系一样

就像我们用这个宝石做的一样:

谢谢你宝贵的建议


PH

我目前正在尝试做同样的事情(我认为随着时间的推移,我们中的人会越来越多),我找到的唯一真正的参考资料是赛斯·法克森在他的博客上的文章。

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

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