Juste pour mettre à jour cela car il semble que beaucoup de gens y viennent, si vous utilisez Rails 4, regardez les réponses de Trung Lê` et VinniVidiVicci.
Topic.where.not(forum_id:@forums.map(&:id))
Topic.where(published:true).where.not(forum_id:@forums.map(&:id))
J'espère qu'il existe une solution simple qui n'implique pas find_by_sql
, sinon je suppose que cela devra fonctionner.
J'ai trouvé cet article qui fait référence à ceci:
Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) })
ce qui est le même que
SELECT * FROM topics WHERE forum_id IN (<@forum ids>)
Je me demande s'il y a un moyen de faire NOT IN
ça, comme:
SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)
Person.all(:name.not => ['bob','rick','steve'])