1

我有各種模型對應於基於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

回答

1

目前,我正在嘗試做相同的(並且隨着時間的推移會有更多的我們,我認爲)和唯一真正的參考,我發現是由Seth法克森在他的博客。 on his blog

他正在通過在父模型中創建一個子類來做has_many的變體,其中json/jsonb的每一行然後作爲單獨的關聯對象Parent :: Child被訪問。

我不確定它會作爲多態關聯的替代品有多好,但我會放棄它。

相關問題