Du fick det här problemet eftersom ActiveRecord inte kan känna igen den här raden som rad från din kontotabell. AR analyserar inte din sql och den är inte säker på vad den ska göra med anonym cortage.
Om du använder find_by_sql
dina valda attribut är inte mappade till din modell korrekt men fortfarande tillgängliga, så försök:
result.id
result.email
Men du har också två sätt att fixa det.
Först (det är väldigt hackigt men lätt lösning), transformera din sql till Arel
, som gäller för omfattningarna:
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"))
... och anropa AR distinkt metod:
Account.unverified_with_no_associations.select(:id, :email).distinct
Andra (det är mycket bättre lösning):
Använd inte sql direkt. Skriv om ditt omfång med Arel
(https://github.com/rails/arel
) eller med squeel
(https://github.com/activerecord-hackery/squeel
)