Anda memiliki hasil yang benar dalam kedua contoh.
Jika Anda hanya menggunakan count
di pilih Anda selalu mendapat nomor sebagai hasil kueri. Jadi hasil Anda dari database dapat diharapkan.
Dalam kasus Rails Anda mencoba untuk mendapatkan beberapa set catatan dengan scope
dengan count
dalam pernyataan pilih. Diharapkan mendapat set kosong jika Anda memiliki count
dalam kueri Anda.
Coba count_by_sql
metode http://apidock.com/rails/ActiveRecord/Base/count_by_sql/class untuk mendapatkan jumlah catatan alih-alih set kosong.
Dan gunakan tanpa ruang lingkup, tetapi dengan metode kelas:
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