問題は、条件に一致するものが にRestaurant
ないMenuItems
場合、ActiveRecord は が見つからないと言うことRestaurant
です。関連するコードは次のとおりです。
class Restaurant < ActiveRecord::Base
has_many :menu_items, dependent: :destroy
has_many :meals, through: :menu_items
def self.with_meals_of_the_week
includes({menu_items: :meal}).where(:'menu_items.date' => Time.now.beginning_of_week..Time.now.end_of_week)
end
end
そして生成されたSQLコード:
Restaurant Load (0.0ms)←[0m ←[1mSELECT DISTINCT "restaurants".id FROM "restaurants"
LEFT OUTER JOIN "menu_items" ON "menu_items"."restaurant_id" = "restaurants"."id"
LEFT OUTER JOIN "meals" ON "meals"."id" = "menu_items"."meal_id" WHERE
"restaurants"."id" = ? AND ("menu_items"."date" BETWEEN '2012-10-14 23:00:00.000000'
AND '2012-10-21 22:59:59.999999') LIMIT 1←[0m [["id", "1"]]
ただし、 Rails Guidesのこの部分によると、これは発生しないはずです。
Post.includes(:comments).where("comments.visible", true)
この includes クエリの場合、どの投稿にもコメントがなかった場合でも、すべての投稿が読み込まれます。