Nur um dies zu aktualisieren, da es scheint, dass eine Menge Leute dazu kommen, wenn Sie Rails 4 verwenden, schauen Sie sich die Antworten von Trung Lê` und VinniVidiVicci an.Wie eine NOT IN-Abfrage mit ActiveRecord/Rails auszudrücken?
Topic.where.not(forum_id:@forums.map(&:id))
Topic.where(published:true).where.not(forum_id:@forums.map(&:id))
ich es gehofft habe, ist eine einfache Lösung, die nicht find_by_sql
mit sich bringt, wenn nicht, dann denke ich, dass wird arbeiten.
fand ich this article, die diese verweist:
Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) })
, die die gleiche ist wie
SELECT * FROM topics WHERE forum_id IN (<@forum ids>)
Ich frage mich, ob es einen Weg gibt NOT IN
damit zu tun, wie:
SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)
Als eine FYI, Datamapper hatte spezielle Unterstützung für NOT IN. Beispiel: 'Person.all (: name.not => ['bob', 'rick', 'steve'])' –
Entschuldigung, dass ich ignorant bin, aber was ist Datamapper? ist das Teil der Schienen 3? –
Data Mapper ist eine alternative Möglichkeit zum Speichern von Daten, ersetzt Active Record durch eine andere Struktur und dann schreiben Sie Ihre modellbezogenen Sachen wie Abfragen anders. –