Hanya untuk memperbarui ini karena tampaknya banyak orang datang ke ini, jika Anda menggunakan Rails 4 lihat jawaban oleh Trung Lê` dan VinniVidiVicci.
Topic.where.not(forum_id:@forums.map(&:id))
Topic.where(published:true).where.not(forum_id:@forums.map(&:id))
Saya berharap ada solusi mudah yang tidak melibatkan find_by_sql
, jika tidak maka saya rasa itu harus berhasil.
Saya menemukan artikel ini yang mereferensikan ini:
Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) })
yang sama dengan
SELECT * FROM topics WHERE forum_id IN (<@forum ids>)
Saya bertanya-tanya apakah ada cara untuk melakukan NOT IN
itu, seperti:
SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)
Person.all(:name.not => ['bob','rick','steve'])