Du fik dette problem, fordi ActiveRecord ikke kan genkende denne række som række fra din kontotabel. AR analyserer ikke din sql, og den er ikke sikker på, hvad den skal gøre med anonym cortage.
Hvis du bruger find_by_sql
dine valgte attributter er ikke knyttet til din model korrekt, men stadig tilgængelige, så prøv:
result.id
result.email
Men du har også to måder at løse det på.
Først (det er meget hackish, men nem løsning), transformer din sql til Arel
, der gælder for omfanget:
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"))
... og kald AR distinct metode:
Account.unverified_with_no_associations.select(:id, :email).distinct
Anden (det er meget bedre løsning):
Brug ikke sql direkte. Omskriv dit omfang med Arel
(https://github.com/rails/arel
) eller med squeel
(https://github.com/activerecord-hackery/squeel
)