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))
)
請告訴我有一個更好的辦法!