Apenas para atualizar isso, pois parece que muitas pessoas chegam a isso, se você estiver usando o Rails 4, observe as respostas de Trung Lê` e VinniVidiVicci.
Topic.where.not(forum_id:@forums.map(&:id))
Topic.where(published:true).where.not(forum_id:@forums.map(&:id))
Espero que exista uma solução fácil que não envolva find_by_sql
, se não, acho que terá que funcionar.
Encontrei este artigo que faz referência a isso:
Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) })
que é o mesmo que
SELECT * FROM topics WHERE forum_id IN (<@forum ids>)
Gostaria de saber se existe uma maneira de fazer NOT IN
isso, como:
SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)
Person.all(:name.not => ['bob','rick','steve'])