我有一個父對象Post,它有以下子對象。反向多態性關聯
has_one :link
has_one :picture
has_one :code
這些孩子是相互排斥的。
是否有反向使用多態關聯的方法,以便我不必在Post表中使用link_id,picture_id和code_id字段?
我有一個父對象Post,它有以下子對象。反向多態性關聯
has_one :link
has_one :picture
has_one :code
這些孩子是相互排斥的。
是否有反向使用多態關聯的方法,以便我不必在Post表中使用link_id,picture_id和code_id字段?
我相信你在尋找has_one
的:as
選項。它允許你指定belongs_to
關聯結束的名稱。
當一切都失敗了,閱讀文檔:http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_one
也許我錯過了一些東西,但我將如何創建一個動態的關聯與小孩使用:as? 我瞭解多態關於如何子對象可以有任何類型的父對象。但是我問的是父對象如何可以有任何類型的子對象。 我想做一些類似於@ post.postable的東西,並獲取子對象,這將是鏈接,圖片或代碼之一。 – 2010-08-15 22:25:51
有沒有辦法使用反向多態性 協會讓我 不必有link_id, picture_id和code_id領域的方式我的 郵政表?
has_one
意味着外鍵是在其他表。如果你真的以這種方式定義你的模型,那麼你的Post表中就不會有link_id
,picture_id
和code_id
。我想你的意思是說belongs_to
。
我要像做 @ post.postable並得到孩子 對象,這將是環節之一, 圖片或代碼。
我相信你可以使用STI和結合links
,pictures
和codes
表,然後檢索時測試模型的類型,做到這一點。這似乎kludgey雖然,並可能結束了大量未使用的列。
是否有沒有存儲未使用的id列,而不是節省空間的原因?如果你願意讓他們,那麼你可以定義一個虛擬屬性和postable_type
柱:(未經測試的代碼,可壯觀失敗)
def postable
self.send(self.postable_type)
end
def postable=(p)
self.send(postable_type.to_s+"=",p)
end
我只是尋找一種比多個* _id列更優雅的方式。雖然當這個線程被證明,多個* _id列方法可能是最簡單和最好的。 – 2010-08-20 16:34:06
讓照片有has_many關係有意義嗎? 然後,你可以做你正在尋找.. – Trip 2010-08-15 15:32:23