Rails/PSQL-将列表变成数组,并搜索是否包括子阵列



我完全陷入了这个问题,我疑问找不到任何答案。

我会尽力解释的方式,但这很难。

因此,我有第一个型号(食谱(,该模型将列成分存储在数组中的所有成分中。我还有一个成分模型,该模型是通过联接表连接到食谱的,这是第一列的所有可用成分的名称。

我想在我的搜索方法中包含一个将成分的查询。名称列转换为一个数组,然后从搜索方法中返回仅在成分中完全包含成分成分的食谱。

我尝试了这个

recipes = recipes.joins(:ingrediantizations).where('array_agg('ingredients.name') @> recipe.ingredients')

,但它没有给出正确的恢复 - Ingrediantization是联接表。

希望您能帮助我!

几天将我的头缠绕在此之后,我终于找到了解决方案。

我发布它,以便有人可以从中受益。

第二步似乎很奇怪,但我想,这是用psql中的字面数组所需的卷曲括号制作数组的唯一方法。

成分是将成分存储在数组中的属性。

 items = Item.pluck(:name)
    items = "{#{ items.map {|term| %Q("#{ term }") }.join(",") }}"
    recipes=recipes.where("ingredients <@?", "#{items}")

最新更新