Ruby On Rails 5,activerecord query其中模型关联id包括数组中的所有id

时间:2018-02-26 14:33:52

标签: ruby-on-rails ruby activerecord

我有很多属于食谱和配料的协会。

我正在尝试返回在给定的整数数组中包含所有成分id的食谱。 例如。我使用多种成分进行搜索,我想要退回任何含有所有成分的食谱。如果给出了太多的成分,但食谱中包含了所有成分,它也应该返回配方。

我尝试了一些事情,

Recipe.joins(:ingredients).where(ingredients: { id: ids })

返回含有任何成分

的食谱
Recipe.joins(:ingredients).where('ingredients.id LIKE ALL ( array[?])', ids)

这会出错:ERROR: operator does not exist: integer ~~ integer

如何才能找到包含数组中给出的所有ID的配方?

1 个答案:

答案 0 :(得分:1)

尝试此查询:

# Ingredient ID array
ingredient_ids = [....]

Recipe.joins(:ingredients).where(ingredients: { id: ingredient_ids }).
  group("recipes.id").
  having('count(recipes.id) >= ?', ingredient_ids.size)
  1. 第一行确保只提取具有任何成分的食谱
  2. 第二&第三行确保加载的食谱具有id数组的最小成分大小,因此如果缺少任何成分,则不会被考虑。
  3. 希望它有所帮助!