Rails3 アプリを 3.2.6 にアップグレードしています。非推奨の default_scope オプションに問題があります。
私は、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