0

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 
4

1 に答える 1

0

インクルードが 3.0.10 と 3.2.6 の間でどのように機能するかが変更された可能性があります。単一のクエリを作成する代わりに、複数のクエリを作成して熱心な読み込みを行うようになりました。そこにオプションを貼りjoins付けて、サイトテーブルと明示的に結合します。

default_scope :include => [:campaign, :site], :order => :'sites.name', :joins => :sites
于 2012-07-02T12:15:21.920 に答える