Имате този проблем, защото ActiveRecord не може да разпознае този ред като ред от таблицата на вашия акаунт. AR не анализира вашия sql и не е сигурно какво да прави с анонимния кортаж.
Ако използвате find_by_sql
избраните от вас атрибути не са картографирани правилно към вашия модел, но все още са достъпни, така че опитайте:
result.id
result.email
Но имате и два начина да поправите това.
Първо (това е много хакерско, но лесно решение), трансформирайте вашия sql към Arel
, които са валидни за обхватите:
scope :unverified_with_no_associations, -> {
send(:default_scoped).from(Arel.sql("(SELECT * 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))
AS accounts"))
... и извикване на AR различен метод:
Account.unverified_with_no_associations.select(:id, :email).distinct
Второ (това е много по-добро решение):
Не използвайте sql директно. Пренапишете своя обхват с Arel
(https://github.com/rails/arel
) или с squeel
(https://github.com/activerecord-hackery/squeel
)