Rails的相关模型具有特定的值

时间:2018-08-17 12:54:21

标签: sql ruby-on-rails rails-activerecord

我有一个配方模型,其中包含通过recipe_ingredients的许多成分。

我如何有效地获得所有食谱

  • 有黄油和巧克力
  • 有黄油但没有巧克力
  • 既没有黄油也没有巧克力

将有数百万种食谱,因此我希望仅通过一个查询即可获得所需的结果,而不必为第一个条件对结果进行选择或拒绝。 喜欢:

Recipe.joins(:ingredients)
  .where(ingredients: { name: 'chocolate' })
  .select{ |recipe| recipe.ingredients.pluck(:name).include?('butter') }

此外,当用户选择两种以上成分时,我需要它来工作。 我愿意以不同的方式存储数据,如果这样可以提高搜索效率-或者使用直接的SQL查询。

谢谢

1 个答案:

答案 0 :(得分:0)

对于含黄油和巧克力的食谱:

Recipes.joins(:ingredients)
  .where(ingredients: { name: ['chocolate','butter'] })

对于含有黄油但不含巧克力的食谱:

Recipes.joins(:ingredients)
  .where(ingredients: { name: 'butter' })
  .where.not(ingredients: { name: 'chocolate' })

对于不含黄油或巧克力的食谱:

Recipes.joins(:ingredients)
  .where.not(ingredients: { name: ['chocolate', 'butter'] })

希望这会有所帮助!