Hai riscontrato questo problema perché ActiveRecord non è in grado di riconoscere questa riga come riga dalla tabella dell'account. AR non analizza il tuo sql e non è sicuro di cosa fare con il cortage anonimo.
Se usi find_by_sql
gli attributi selezionati non sono stati mappati correttamente sul modello ma sono comunque accessibili, quindi prova:
result.id
result.email
Ma hai anche due modi per risolverlo.
Prima (è una soluzione molto hackish ma facile), trasforma il tuo sql in Arel
, valido per gli ambiti:
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 chiama il metodo AR distinto:
Account.unverified_with_no_associations.select(:id, :email).distinct
Secondo (è una soluzione molto migliore):
Non utilizzare sql direttamente. Riscrivi il tuo ambito con Arel
(https://github.com/rails/arel
) o con squeel
(https://github.com/activerecord-hackery/squeel
)