Rails - Почему в этом случае не работает загрузка Eager? - PullRequest
1 голос
/ 30 марта 2012

У меня есть эти 3 модели с отношением has_many через:

class Wine < ActiveRecord::Base
  has_many :varietals, :conditions => "varietals.status = 1"
  has_many :grapes, :through => :varietals
end

class Grape < ActiveRecord::Base
  has_many :varietals
  has_many :wines, :through => :varietals
end

class Varietal < ActiveRecord::Base
  belongs_to :wine
  belongs_to :grape
end

@records = Wine.where(conditions).includes({:varietals => :grape})

Но если у меня будет 10 вин, я увижу 10 запросов в моих журналах, как эти после основного запроса Wine:

  Grape Load (0.6ms)  SELECT `grapes`.* FROM `grapes` INNER JOIN `varietals` ON `grapes`.id = `varietals`.grape_id WHERE ((`varietals`.wine_id = '98DF2CEC-61CC-4B22-B40D-620AADF650D2') AND ((varietals.status = 1)))

Как я могу загрузить виноград в основном запросе, чтобы не было запроса на виноград?

1 Ответ

0 голосов
/ 03 мая 2012

Попробуйте:

Wine.includes(:varietals).includes(:grapes).where(conditions)

Если это работает, не спрашивайте меня, почему;)

...