Você tem esse problema porque o ActiveRecord não pode reconhecer esta linha como linha da sua tabela de contas. AR não analisando seu sql e não tem certeza do que fazer com corte anônimo.
Se você usar
find_by_sql
seus atributos selecionados não mapeados para seu modelo corretamente, mas ainda acessíveis, então tente:result.id
result.email
Mas você também tem duas maneiras de corrigir isso.
Primeiro (é uma solução muito hackish, mas fácil), transforme seu sql para
Arel
, que vale para os escopos: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"))
... e chame o método distinto AR:
Account.unverified_with_no_associations.select(:id, :email).distinct
Segundo (é uma solução muito melhor):
Não use sql diretamente. Reescreva seu escopo com
Arel
(https://github.com/rails/arel
) ou com squeel
(https://github.com/activerecord-hackery/squeel
)