default_scope с:include option rails 3.2

Я обновляю приложение rails3 до версии 3.2.6. У меня есть некоторые проблемы с устаревшей default_scope с опциями.

У меня есть пара моделей Campaigns и Sites, которые имеют много-много взаимосвязей через campaign_sites.

class Campaign < ActiveRecord::Base
  has_many :campaign_sites, :dependent => :destroy
  ....
end

class Site < ActiveRecord::Base
  has_many :campaign_sites, :dependent => :destroy
  has_many :campaigns, :through => :campaign_sites
  ...
end

class CampaignSite < ActiveRecord::Base
  default_scope :include => [:campaign, :site], :order => :'sites.name' 
  belongs_to :campaign, :touch => true
  belongs_to :site, :touch => true
  ...
end

Это работает нормально с rails 3.0.10, но после обновления до 3.2.6 я получаю следующую ошибку mysql с этой строкой.

default_scope :include => [:campaign, :site], :order => :'sites.name'

Mysql2::Error: Unknown column 'sites.name' in 'order clause': SELECT `campaigns`.* FROM`campaigns` INNER JOIN `campaign_sites` ON `campaigns`.`id` = `campaign_sites`.`campaign_id` WHERE `campaign_sites`.`site_id` = 11377 ORDER BY campaigns.name, sites.name 

1 ответ

Вероятно, это изменение в том, как работает include между 3.0.10 и 3.2.6. Вместо того, чтобы делать один запрос, теперь он выполняет несколько запросов для быстрой загрузки. Я бы просто воткнул joins там есть опция, так что она явно соединяется с таблицей сайтов:

default_scope :include => [:campaign, :site], :order => :'sites.name', :joins => :sites
Другие вопросы по тегам