我不确定我在这里做错了什么,但是我想为我拥有的模型创建范围,但我希望它能评估一个相关模型的计数......比如说:
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
,为什么这不会作为关系?我不想将它用作方法。
答案 0 :(得分:2)
这里有两件事。首先,你试图打电话给照片而不是照片。
然而,你仍然会得到一个错误,因为在执行时,self
指的是常数Thing,而不是Thing的实例。声明has_many :photos
为Thing的实例定义了一个方法photos
。因此,Thing(常数)没有称为照片的方法。
tl; dr只需使用:joins
参数,因为它只会找到包含照片的记录
scope :with_images, :joins => :photos
答案 1 :(得分:1)
应该是:
self.photos.count > 0
或者如果您正在使用计数器缓存:
self.photos_count > 0