編輯協會:這可能會幫助到我的問題點......不能訪問嵌套的許多一對多的has_many:通過從父對象
有沒有辦法通過做「級聯」:聯想?例如,如果我們隨骨頭歌曲一起走:「腳骨連接到腳踝骨,腳踝骨連接到腿骨,腿骨連接到髖骨......」我不想說那隻腳有髖骨,因爲那不完全準確。我也不想說腳通過腿骨有髖骨(因爲它也需要穿過腳踝)。不,相反,腳has_many臀部穿過腿部的腳踝。將腳連接到腳踝,然後將腳組件連接到腿,然後將整個foot_ankle_leg組件最終連接到臀部。因此,一隻腳可以有多個臀部,但是腳並不屬於臀部,這種關聯僅作爲特定foot_ankle_leg組件的一部分存在。
爲了表示這樣的事情,我是否正確地設置了通過表格來將腳/踝/腿連接「擡」到臀部? (即a_b_c_d_e表是一個類似於「最終」 foot_ankle_leg_hip組裝)
原題:有幾種模式,與各種干預許多一對多走到一起:通過表。由於這些通過表包含附加屬性,因此不使用HABTM。
下面是它如何組合在一起的圖像,綠色框是多對多連接表。爲了簡潔起見,更名爲信
這裏的結構是怎樣編碼
class A < ApplicationRecord
has_many :a_bs
has_many :bs, through: :a_b
...
end
class B < ApplicationRecord
has_many :a_bs,
has_many :as, through: :a_b
...
end
class AB < ApplicationRecord
belongs_to :a
belongs_to :b
has_many :a_b_c_ds
has_many :c_ds, through: :a_b_c_d
...
end
class C < ApplicationRecord
has_many :c_ds
has_many :ds, through: :c_d
...
end
class D < ApplicationRecord
has_many :c_ds
has_many :cs, through: :c_d
...
end
class CD < ApplicationRecord
belongs_to :c
belongs_to :d
has_many :a_b_c_ds
has_many :a_bs, through: :a_b_c_d
...
end
class ABCD < ApplicationRecord
belongs_to :a_b
belongs_to :c_d
has_many :a_b_c_d_es
has_many :es, through: :a_b_c_d_e
...
end
class E < ApplicationRecord
has_many :a_b_c_d_es
has_many :a_b_c_ds, through: :a_b_c_d_e
...
end
class ABCDE < ApplicationRecord
belongs_to :a_b_c_d
belongs_to :e
...
end
每當我試着從控制檯父對象訪問嵌套的孩子,像A.first.a_b_c_ds
,它返回
#<ABCD::ActiveRecord_Associations_CollectionProxy:0x26ca578>
。
這是我應該看到的嗎?我是否需要直接與該CollectionProxy交互,而不是看到「常規」記錄輸出?如果是這樣,這是一個新的東西,我需要了解:)
在讀出,我也注意到,它試圖找到通過表中的父母的ID,而不是相關聯的「孩子」ID 。
ABCD Load (0.3ms) SELECT "a_b_c_ds".* FROM "a_b_c_d" WHERE "a_b_c_d"."a_id" = ? [["a_id", 1]]
現在很明顯,a_id
將不在表ABCD中。但ab_id
在那裏,其中是與a_id
關聯。如果我正確地閱讀導軌指南,如果我正確安裝,導軌應該足夠聰明以便作出區分。
任何想法我錯了嗎?
類名不一定按字母順序排列。例如,Wrapping,Package,Object,WrappingPackage,WrappingPakakgeObject。但是由於我使用的命名多對多通過:表,我的理解表名應該不重要。只有在使用has_many_and_belongs_to連接表時纔會發揮作用。但是,我在哪裏?
感謝您的幫助!讓我知道,如果你需要更多的片段!
您的示例:'A.first.a_b_c_ds'似乎有誤,A中沒有'a_b_c_ds'關聯。 –
啊,好吧!所以如果我正確地聽到你的話,關聯不會像Class繼承那樣自動堆疊或級聯?這些關聯必須在「數據鏈」本身上下明確定義? – Spectator6