我需要对我的模型执行查询,以便我测试一组标记(belongs_to :recipe
)
class Recipe < ActiveRecord::Base
has_many :taggings, dependent: :destroy
has_many :tags, through: :taggings
end
class Tag < ActiveRecord::Base
has_many :taggings, dependent: :destroy
has_many :recipes, through: :taggings
end
我可以这样做:
Recipe.joins(:tags).where("tags.name = ?", 'main course')
但我想测试一组标签。如果我不使用join
,我可以使用数组进行查询,如下所示:
Recipe.where(id: [1, 2, 3])
但是当我尝试时失败了:
Recipe.joins(:tags).where(tags.name: ['main course', 'snack'])
如何修复最终查询(postgres db)以允许数组?
答案 0 :(得分:2)
Recipe.where(id: [1, 2, 3])
将使用in
,因为会传递一系列ID。
使其适用于tags.name,
Recipe.joins(:tags).where('tags.name in (?) ', ['main course', 'snack'])
应该用于我们从连接关系中搜索而不是从食谱表中搜索。