閱讀Ruby on Rails指南和一些關於多態關聯問題的stackoverflow響應之後,我瞭解了它的使用和實現,但我對特定的使用場景有疑問。我有可與多個topics
,categories
,images
和其它各種型號(其也具有不同的tags
)相關聯,但代替tags
表內放置參考字段(foreign_id
,foreign_type
)tags
,我寧願創建一個單獨的關聯表。這仍然可以使用:polymorphic => true
?獨立多態關聯表
事情是這樣的:
create_table :tags do |t|
t.string :name
t.remove_timestamps
end
create_table :object_tags, :id => false do |t|
t.integer :tag_id
t.references :tagable, :polymorphic => true
t.remove_timestamps
end
如果這是不可能的,我打算創建相同:object_tags
表,並使用:conditions
的Tag
模式與其他模式中,迫使協會。有沒有軌道這樣做?謝謝! (有軌3.0.9 &紅寶石1.8.7 <工作 - 因爲部署服務器仍在使用1.8.7)
UPDATE: 感謝Delba! Answer是HABTM多態性的工作解決方案。
class Tag < ActiveRecord::Base
has_many :labels
end
class Label < ActiveRecord::Base
belongs_to :taggable, :polymorphic => true
belongs_to :tag
end
class Topic < ActiveRecord::Base
has_many :labels, :as => :taggable
has_many :tags, :through => :labels
end
create_table :tags, :timestamps => false do |t|
t.string :name
end
create_table :labels, :timestamps => false, :id => false do |t|
t.integer :tag_id
t.references :taggable, :polymorphic => true
end
UPDATE:因爲我需要雙向HABTM,我最終要回創建單獨的表。
你爲什麼想這樣呢? (純粹的好奇心,沒有判斷力) – Damien
讓一個單一的表格具有所有可用於「標籤」的關聯,而不是爲每個模型的關聯創建單獨的表格似乎更有效率。目前我確實已經設置了單個關聯表。回答你的問題,我意識到真的不需要這種解決方案。我正在尋找的那種設置會使用更多的內存,雖然對嗎? –
我現在甚至沒有意見的開始。我不認爲有一種做多態的習慣,但我肯定會明天試一試。很好的問題。 Upvoted!編輯:它可能會給你的問題,但我不知道答案:http://stackoverflow.com/questions/6964678/habtm-polymorphic-relationship – Damien