2010-11-16 42 views
1

noob問題在這裏。我有一個has_many:通過項目和標籤之間的關係。查找與給定標籤相關的所有項目很簡單:rails:獲取與多個給定標籤關聯的項目

things=Tag.find(1).items 

但是如果我想找到一個以上的定標籤相關的所有項目?我在想這樣的事:

things=Tag.find(1).items 
Tag.find(2).things # wrong, but you get the idea 

回答

1

你可以使用數組聯合運算符。

things = Tag.find(1).items | Tag.find(2).items 

這將爲標籤,這可能是太多的方式取決於你想做什麼每項的對象。如果你想要一些更具伸縮性的東西,你可以在連接表上進行查找。

things = ItemTags.find_by_sql(" 
    SELECT item_id, COUNT(tag_id) AS tag_count 
    FROM item_tags 
    WHERE tag_id IN (1, 2) 
    GROUP_BY item_id 
    HAVING tag_count = 2; 
").map(&:item) 

剛剛在瀏覽器中寫道,所以它可能是完全錯誤的。此外,可能有一種方法可以用activerecord查找程序來做到這一點,那將會更好一些find_by_sql。

+0

哦,是我不好。改用'&'。這是路口運營商。 – zaius 2010-11-17 01:09:46

0
things = Things.where(:tag => [1, 2]) 
things = Things.where('tag in :tags', [1, 2]) 

等等

相關問題