ActiveRecord не отличается от того, что вы делаете в SQL:
class User < ActiveRecord::Base
has_many :photos
named_scope :has_no_photos,
:conditions => "(SELECT COUNT(#{Photo.table_name}.*)
FROM #{Photo.table_name}
WHERE #{Photo.table_name}.user_id = #{User.table_name}.id) = 0"
end
Возможно, есть более эффективные способы сделать это. Можно было бы сохранить photos_count в пользовательских строках: тогда запрос становится простым photos_count = 0 вместо сложного объединения:
class Photo < ActiveRecord::Base
belongs_to :user, :counter_cache => true
end
class User < ActiveRecord::Base
has_many :photos
named_scope :has_no_photos, :conditions => {:photos_count => 0}
end