things=Tag.find(1).items
但是,如果我想找到与多个给定标签相关联的所有项目,该怎么办?我想的是:
things=Tag.find(1).items
Tag.find(2).things # wrong, but you get the idea
答案 0 :(得分: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)
刚刚在浏览器中写道,所以它可能是完全错误的。此外,有可能有一种方法可以使用active_ord_sql更好的activerecord finders。
答案 1 :(得分:0)
things = Things.where(:tag => [1, 2])
things = Things.where('tag in :tags', [1, 2])
等...