2010-11-23 5 views
1

Я не уверен, что я делаю неправильно здесь, но я хочу создать область для модели, которую я имею, но я хочу, чтобы она оценила счет на связанной модели ... например, скажите:Рельсы, проблемы с областями

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 определяет метод photos для экземпляров Thing. Поэтому Thing (константа) не имеет метода, называемого фотографией.

Т.Л., д-р Просто используйте :joins аргумент, так как это будет только найти записи, которые имеют фотографии

scope :with_images, :joins => :photos 
1

Оно должно быть:

self.photos.count > 0 

или если вы используете кэш счетчика:

self.photos_count > 0 
Смежные вопросы