Bạn có kết quả đúng trong cả hai ví dụ.
Nếu bạn chỉ sử dụng count
khi chọn, bạn luôn nhận được một số do truy vấn. Vì vậy, kết quả của bạn từ cơ sở dữ liệu là có thể mong đợi.
Trong trường hợp rails bạn đang cố gắng lấy một số tập hợp các bản ghi theo scope
với count
trong câu lệnh chọn. Có thể dự kiến sẽ có bộ trống nếu bạn có count
trong truy vấn của bạn.
Hãy thử count_by_sql
method http://apidock.com/rails/ActiveRecord/Base/count_by_sql/class để nhận số lượng bản ghi thay vì tập hợp trống.
Và sử dụng nó mà không có phạm vi, nhưng với phương thức lớp:
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