Tiene este problema porque ActiveRecord no puede reconocer esta fila como una fila de su tabla de cuentas. AR no analiza su sql y no está seguro de qué hacer con el corte anónimo.
Si usa find_by_sql
sus atributos seleccionados no están asignados a su modelo correctamente pero aún están accesibles, así que intente:
result.id
result.email
Pero también tienes dos formas de solucionarlo.
Primero (es una solución muy hackish pero fácil), transforma tu sql a Arel
, que es válido para los ámbitos:
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"))
... y llame al método distinto de AR:
Account.unverified_with_no_associations.select(:id, :email).distinct
Segundo (es una solución mucho mejor):
No use sql directamente. Reescriba su alcance con Arel
(https://github.com/rails/arel
) o con squeel
(https://github.com/activerecord-hackery/squeel
)