我不确定如何更好地问这个问题。我有模型Item
和模型Tag
,关联度has_and_belongs_to_many
我需要从表items_tags
中获取结果,该表包含具有2个标签记录的item_id。示例:
这里我需要item_id,其tag_id分别为1和2。(结果:item_id = 4)
因此,如果我使用WHERE tag_id = 1 AND tag_id = 2
-没有结果。如果WHERE tag_id IN (1,2)
-结果过多(红色和绿色)
我可以执行以下步骤:
1)first = tag1.items.pluck(:id)
2)second = tag2.items.pluck(:id)
3)what_i_need = (first & second)
另一种方法是一个查询:tag1.items.where(id: tag2.products.pluck(:id))
是否有另一种(更快)的方式来实现某些JOIN变体?
我希望这可以解决问题:
tag_ids = [1, 2]
Item.joins(:tags).where(tags: { id: tag_ids }).group(:id).having("count(*) = ?", tag_ids.size)