Rails,范围问题

时间:2010-11-23 00:24:28

标签: ruby-on-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 个答案:

答案 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