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

Postgresql Rails 4:搜索界面的高级查询,postgresql,ruby-on-rails-4,activerecord,where,Postgresql,Ruby On Rails 4,Activerecord,Where,我需要在我的模型上执行一个查询,该查询允许我测试标记数组(属于:recipe) 但是我想测试一组标记。如果我不使用join我可以使用如下数组进行查询: Recipe.where(id: [1, 2, 3]) 但当我尝试时,它失败了: Recipe.joins(:tags).where(tags.name: ['main course', 'snack']) 如何修复最终查询(postgres db)以允许使用数组?配方。其中(id:[1,2,3])将使用中的,因为id数组已传递 要使其与ta

我需要在我的模型上执行一个查询,该查询允许我测试标记数组(
属于:recipe

但是我想测试一组标记。如果我不使用
join
我可以使用如下数组进行查询:

Recipe.where(id: [1, 2, 3])
但当我尝试时,它失败了:

Recipe.joins(:tags).where(tags.name: ['main course', 'snack'])
如何修复最终查询(postgres db)以允许使用数组?
配方。其中(id:[1,2,3])
将使用
中的
,因为id数组已传递

要使其与tags.name一起工作

Recipe.joins(:tags).where('tags.name in (?) ', ['main course', 'snack'])
应该在我们从联接关系而不是从配方表中搜索时使用。

配方。其中(id:[1,2,3])
将在中使用
,因为传递了id数组

要使其与tags.name一起工作

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

应该在我们从联接关系而不是从recipes表中搜索时使用。

您不能在Ruby中编写任意SQL表达式,如
tags.name
。这些需要以字符串的形式编写。不能在Ruby中编写任意SQL表达式,如
tags.name
。这些需要写成字符串。更喜欢
.where('tags.name'=>['main course','snakt'])
并让Rails构建
where。。。在(…)
中,我注意到一个问题。我需要它只返回数组中所有标记的菜谱,而不是数组中任何标记的菜谱。换句话说,上面的例子应该只返回带有主菜和零食的标签的食谱
.where('tags.name'=>['main course','snakp'])
,并让Rails构建
where。。。在(…)
中,我注意到一个问题。我需要它只返回数组中所有标记的菜谱,而不是数组中任何标记的菜谱。换句话说,上面的例子应该只返回标有主菜和零食的食谱
Recipe.joins(:tags).where('tags.name in (?) ', ['main course', 'snack'])