1
我有以下型号Rails的:其中不上的has_many通过
class Recipe < ActiveRecord::Base
has_many :recipe_allergens
has_many :allergens, through: :recipe_allergens
end
我试图找到所有不具有给定一组过敏原的食谱,所以我尝试joins(:allergens).where.not(allergens: { id: allergens })
。
不幸的是,这并没有解决空情况,其中Recipe
可能没有任何关联的Allergen
。
我想LEFT OUTER JOIN
includes
确实会处理这个问题。
你应该怎么写这个查询?
编辑:
我得到这个工作有以下,但它似乎真的总值:
joins("LEFT OUTER JOIN recipe_allergens ON recipe_allergens.recipe_id = recipes.id")
.joins("LEFT OUTER JOIN allergens ON allergens.id = recipe_allergens.allergen_id")
.where(
Allergen.arel_table[:id].not_in(allergen_ids)
.or(Allergen.arel_table[:id].eq(nil))
)
请告诉我有一个更好的办法!