rails:获取与多个给定标签关联的项目

时间:2010-11-16 23:52:59

标签: ruby-on-rails

这里没有问题。我有一个has_many:通过项目和标签之间的关系。查找与给定标记关联的所有项目非常简单:

things=Tag.find(1).items

但是,如果我想找到与多个给定标签相关联的所有项目,该怎么办?我想的是:

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

2 个答案:

答案 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])

等...