2012-07-02 36 views
0

我正在將rails3應用升級到3.2.6 我對帶有選項的不推薦的default_scope有一些問題。default_scope with:include option rails 3.2

我有幾個模型的活動和網站,通過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 

回答

0

這很可能是包含在3.0.10和3.2.6之間工作的變化。現在不用進行單個查詢,而是通過多個查詢來進行急切的加載。我只想在堅持一個joins選項有那麼它明確地與站點表連接:

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

我試着用':include'在3.2.6和它的作品。很可能,數據庫結構存在問題。 –

+0

@WawaLoo,我甚至用:joins =>:sites,但它沒有奏效。你能提供關於你正在談論的db結構的更多信息嗎? – venkatareddy

+0

它仍然會產生相同的SQL嗎? –