Просто для оновлення, оскільки, здається, багато людей приходять до цього, якщо ви використовуєте Rails 4, подивіться на відповіді Trung Lê` і VinniVidiVicci.
Topic.where.not(forum_id:@forums.map(&:id))
Topic.where(published:true).where.not(forum_id:@forums.map(&:id))
Я сподіваюся, що існує просте рішення, яке не передбачає find_by_sql
, якщо ні, то я думаю, що доведеться попрацювати.
Я знайшов цю статтю, в якій посилається на це:
Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) })
що те саме, що
SELECT * FROM topics WHERE forum_id IN (<@forum ids>)
Мені цікаво, чи є спосіб зробити NOT IN
це, наприклад:
SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)
Person.all(:name.not => ['bob','rick','steve'])