Rails 4:搜索界面的高级查询

时间:2017-01-05 15:13:09

标签: postgresql ruby-on-rails-4 activerecord where

我需要对我的模型执行查询,以便我测试一组标记(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)以允许数组?

1 个答案:

答案 0 :(得分:2)

Recipe.where(id: [1, 2, 3])将使用in,因为会传递一系列ID。

使其适用于tags.name,

Recipe.joins(:tags).where('tags.name in (?) ', ['main course', 'snack'])

应该用于我们从连接关系中搜索而不是从食谱表中搜索。