我有各種模型對應於基於STI的網絡設備,只有幾個字段在它們之間變化,我存儲在jsonb字段中。在rails和嵌套值中在postgresql jsonb字段中使用has_many相當於
另一個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的主要原因是網絡設備之間的多態ASSOCATION(每個JSON記錄的鍵「network_device_destination_id」)。
我使用ActiveRecord存儲與寶石的特定字段直接存儲在JSON而不是陣列中的https://github.com/devmynd/jsonb_accessor 然後,對於這個storized屬性我可以很容易地用簡單的形式作爲一個正常的屬性。
但對於數組中的元素,它是真正棘手的工藝驗證,寫的形式...
所以我問自己,是否有可能使一個類的網絡記錄,其自己的規則,驗證和訪問器,並使用一個nested_attributes數組的王,就像我們用has_many關係做的那樣。
喜歡的東西,我們會用這種寶石做: https://github.com/lailsonbm/awesome_nested_fields
謝謝您的寶貴建議!
PH