Vous avez le bon résultat dans les deux exemples.
Si vous utilisez uniquement count
dans select, vous obtenez toujours un nombre à la suite d'une requête. Donc, votre résultat de la base de données est prévisible.
Dans le cas des rails, vous essayez d'obtenir un ensemble d'enregistrements par scope
avec count
dans l'instruction select. On peut s'attendre à avoir un ensemble vide si vous avez count
dans votre requête.
Essayez count_by_sql
méthode http://apidock.com/rails/ActiveRecord/Base/count_by_sql/class pour obtenir le nombre d'enregistrements au lieu d'un ensemble vide.
Et utilisez-le sans portée, mais avec la méthode de classe :
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