1

我在寫一些棘手的多態關係來處理標記。如何指定通過幾個模型的Rails中的關聯

我有一個Tag模型和Tagging模型,belongs_to的多態taggable

我有一個Item模型,其中has_many :taggings, :as => :taggablehas_many :tags, :through => :taggings,所以我可以打電話@item.tags

這一切工作正常。

我想把另一個模型加入混合 - Store其中has_many :items。我希望能夠使用@store.tags查找與商店中所有商品相關的所有標籤。

這是我有:

class Store < AR::Base 
    has_many :items 
    has_many :tags, :through => :items, :source => :taggings 

然而,這將返回所有在店裏的物品,而不是實際的代碼相關聯的taggings的。

如何通過標籤指定商店has_many標籤,通過商品?

如果需要可以發佈更多信息 - 試圖防止信息過載!謝謝:)

回答

2

源用於has_many關聯必須是belongs_tohas_one,或者has_many關聯而不一個:through選項(由於this answer爲信息)。

a plugin,有人已經成功了,但在我的情況下,它似乎並沒有正確工作與我的taggable多態關聯。

此刻,我的解決方案是通過一個finder_sql選項has_many

class Store < ActiveRecord::Base 
    has_many :items 
    has_many :tags, :finder_sql => 
    'SELECT tags.* from tags 
     INNER JOIN taggings on tags.id = taggings.tag_id 
     INNER JOIN items on items.id = taggings.taggable_id AND taggings.taggable_type = "Item" 
     WHERE items.store_id = #{id}' 

end 
0

可以在純Ruby的事:

site.wares.map(&:tags).flatten.uniq 

這將是低效的,雖然,除非你有標籤/商品/項的數量少。

相關問題