我有一个配方模型,其中包含通过recipe_ingredients的许多成分。
我如何有效地获得所有食谱
将有数百万种食谱,因此我希望仅通过一个查询即可获得所需的结果,而不必为第一个条件对结果进行选择或拒绝。 喜欢:
Recipe.joins(:ingredients)
.where(ingredients: { name: 'chocolate' })
.select{ |recipe| recipe.ingredients.pluck(:name).include?('butter') }
此外,当用户选择两种以上成分时,我需要它来工作。 我愿意以不同的方式存储数据,如果这样可以提高搜索效率-或者使用直接的SQL查询。
谢谢
答案 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'] })
希望这会有所帮助!