ActiveRecord ne diffère pas de ce que vous feriez dans 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
Il y a probablement des moyens plus efficaces de le faire. L'une serait de stocker les photos_count sur les lignes d'utilisateur: alors la requête devient simple photos_count = 0, au lieu d'un complexe rejoindre:
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
Cela donnera une erreur - NoMethodError: méthode non définie 'user_id' pour Fixnum. Vous vouliez probablement mapper 'to_i' après' user_id' (ou omettre complètement la seconde carte ...) –
Ouais, merci, corrigé –
'" id NOT IN? "' Devrait être '" id NOT IN (?) "' – ohho