2010-11-23 168 views
1

我不知道我在做什麼錯在這裏,但我想爲我有一個模型創建範圍,但我希望它評估相關模型的計數...就像說:Rails,範圍問題

class Thing < ActiveRecord::Base 
    has_many :photos 
    scope :with_images, self.photo.count > 0 
end 

class Photo < ActiveRecord::Base 
    belongs_to :thing 
end 

那麼我應該有一個範圍,其將工作像

Thing.where('some conditions').with_images 

我得到的照片NoMethodError,爲什麼不這樣可作爲一個關係?我不想用它作爲一種方法。

回答

2

有兩件事情怎麼回事。首先,您正試圖致電照片,而不是照片。

但是,你仍然會得到一個錯誤,因爲在執行時,self引用常量Thing,而不是Thing的一個實例。聲明has_many :photos爲Thing的實例定義了一種方法photos。因此,Thing(常數)沒有稱爲照片的方法。

TL;博士只需用一個:joins參數,因爲它只會發現,有照片

scope :with_images, :joins => :photos 
記錄
1

它應該是:

self.photos.count > 0 

,或者如果你正在使用計數器緩存:

self.photos_count > 0