noob問題在這裏。我有一個has_many:通過項目和標籤之間的關係。查找與給定標籤相關的所有項目很簡單:rails:獲取與多個給定標籤關聯的項目
things=Tag.find(1).items
但是如果我想找到一個以上的定標籤相關的所有項目?我在想這樣的事:
things=Tag.find(1).items
Tag.find(2).things # wrong, but you get the idea
noob問題在這裏。我有一個has_many:通過項目和標籤之間的關係。查找與給定標籤相關的所有項目很簡單:rails:獲取與多個給定標籤關聯的項目
things=Tag.find(1).items
但是如果我想找到一個以上的定標籤相關的所有項目?我在想這樣的事:
things=Tag.find(1).items
Tag.find(2).things # wrong, but you get the idea
你可以使用數組聯合運算符。
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。
things = Things.where(:tag => [1, 2])
things = Things.where('tag in :tags', [1, 2])
等等
哦,是我不好。改用'&'。這是路口運營商。 – zaius 2010-11-17 01:09:46