Sie haben in beiden Beispielen das richtige Ergebnis.
Wenn Sie nur count
verwenden Bei der Auswahl erhalten Sie immer eine Zahl als Ergebnis der Abfrage. Ihr Ergebnis aus der Datenbank ist also zu erwarten.
Im Fall von Rails versuchen Sie, eine Reihe von Datensätzen nach scope
zu erhalten mit count
in Select-Anweisung. Es ist zu erwarten, dass ein leerer Satz erhalten wird, wenn Sie count
haben in Ihrer Abfrage.
Probieren Sie count_by_sql
aus Methode http://apidock.com/rails/ActiveRecord/Base/count_by_sql/class um die Anzahl der Datensätze anstelle einer leeren Menge zu erhalten.
Und verwenden Sie es ohne Geltungsbereich, aber mit Klassenmethode:
def self.unverified_with_no_associations()
self.count_by_sql("SELECT COUNT(DISTINCT(accounts.id, accounts.email)) FROM accounts WHERE level = 0 AND id NOT IN
(SELECT DISTINCT(account_id) FROM verifications) AND id NOT IN
(SELECT DISTINCT(account_id) FROM positions) AND id NOT IN
(SELECT DISTINCT(account_id) FROM edits) AND id NOT IN
(SELECT DISTINCT(account_id) FROM posts) AND id NOT IN
(SELECT DISTINCT(account_id) FROM reviews) AND id NOT IN
(SELECT DISTINCT(sender_id) FROM kudos) AND id NOT IN
(SELECT DISTINCT(account_id) FROM stacks WHERE account_id IS NOT NULL)")
end