Po prostu zaktualizuj to, ponieważ wydaje się, że wiele osób przychodzi do tego, jeśli używasz Rails 4, spójrz na odpowiedzi Trung Lê` i VinniVidiVicci.
Topic.where.not(forum_id:@forums.map(&:id))
Topic.where(published:true).where.not(forum_id:@forums.map(&:id))
Mam nadzieję, że istnieje proste rozwiązanie, które nie wymaga find_by_sql
, jeśli nie, to chyba będzie musiało zadziałać.
Znalazłem ten artykuł, który odwołuje się do tego:
Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) })
który jest taki sam jak
SELECT * FROM topics WHERE forum_id IN (<@forum ids>)
Zastanawiam się, czy istnieje sposób, aby to zrobić NOT IN
, na przykład:
SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)
Person.all(:name.not => ['bob','rick','steve'])