Masz ten problem, ponieważ ActiveRecord nie może rozpoznać tego wiersza jako wiersza z tabeli konta. AR nie analizuje twojego sql i nie jest pewne, co zrobić z anonimowym cortage.
Jeśli używasz find_by_sql
wybrane atrybuty nie zostały poprawnie zmapowane do modelu, ale nadal są dostępne, więc spróbuj:
result.id
result.email
Ale masz też dwa sposoby, aby to naprawić.
Pierwszy (to bardzo hackowe, ale łatwe rozwiązanie), przekształć swój sql do Arel
, dotyczy to zakresów:
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"))
... i wywołaj odrębną metodę AR:
Account.unverified_with_no_associations.select(:id, :email).distinct
Drugi (to znacznie lepsze rozwiązanie):
Nie używaj bezpośrednio sql. Przepisz swój zakres za pomocą Arel
(https://github.com/rails/arel
) lub z squeel
(https://github.com/activerecord-hackery/squeel
)