次のような has_many 関係があります。
class Event < ActiveRecord::Base
has_many :event_rows
...
end
class EventRow < ActiveRecord::Base
belongs_to :event
...
end
以下のスニペットを実行すると、36 個のクエリが表示されます。
@events = Event.where("date = ?", @date).all
@events.each do |e|
first = e.event_rows.first
first.event
end
このスニペットを実行すると、19 個のクエリしか取得できません
@events = Event.where("date = ?", @date).all
@events.each do |e|
first = e.event_rows.first
first.event = e # forcing the parent
first.event
end
私は何か間違ったことをしていますか、またはレールは EventRow がイベントを要求するたびにクエリを実行しますか?
コメントへの対応: クエリは CACHED としてマークされていません:
SQL (0.7ms)[0m SELECT "event_rows"."id" AS t0_r0, "event_rows"."event_id" ... WHERE "event_rows"."event_id" = 1 LIMIT 1
Event Load (0.6ms)[0m [1mSELECT "events".* FROM "events" WHERE "events"."id" = 1 LIMIT 1[0m
SQL (3.2ms)[0m SELECT "event_rows"."id" AS t0_r0, "event_rows"."event_id" ... WHERE "event_rows"."event_id" = 2 LIMIT 1
Event Load (0.5ms)[0m [1mSELECT "events".* FROM "events" WHERE "events"."id" = 2 LIMIT 1[0m