Solo para actualizar esto, ya que parece que mucha gente viene a esto, si está utilizando Rails 4, vea las respuestas de Trung Lê` y VinniVidiVicci.
Topic.where.not(forum_id:@forums.map(&:id))
Topic.where(published:true).where.not(forum_id:@forums.map(&:id))
Espero que haya una solución fácil que no implique find_by_sql
, si no, supongo que tendrá que funcionar.
Encontré este artículo que hace referencia a esto:
Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) })
que es lo mismo que
SELECT * FROM topics WHERE forum_id IN (<@forum ids>)
Me pregunto si hay una manera de hacer NOT IN
eso, como:
SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)
Person.all(:name.not => ['bob','rick','steve'])