2011-02-17 69 views
0

的Rails 3.0.3和Ruby 1.9.2創建基於HAS_ONE在Rails 3的一個範圍:通過關係

我有下面的類

class item < ActiveRecord::Base 
    belongs_to :user 
    has_one :country, :through => :user 

    .. 

end 

所以itemA.country產生 「美」

的問題是如何做我創建了美國用戶

擁有的所有項目(命名)範圍當我嘗試類似:

scope :american, where('countries.name' => 'United States').includes([:user, :country]) 

然後Item.american不斷回來空,即使Item.first.country => '美國'

順便說一下,在Rails的2.3.4版本中,我們有:

named_scope :american, :include => {:user, :country}, :conditions => { 'countries.printable_name' => 'United States' } 

而且像廣告一樣工作。

+1

略無關,但你應該升級到Rails的3.0。 4,因爲這是一個安全發佈。 – 2011-02-17 23:37:50

回答

2

你忘了複製表名,我也認爲包含的順序和在哪裏可能很重要。它也建議像這樣的協會指定條件時使用代替連接:

scope :american, joins(:users, :countries).where('countries.name' => 'United States') 

如果您希望仍然使用包括:

scope :american, includes(:users, :countries).where('countries.name' => 'United States') 
+0

謝謝。它適用於以下內容:範圍:american,joins(:user,:country).where('countries.name'=>'United States'),所以我猜表名不需要複數化。 – Andy 2011-02-17 23:58:54