Máte tento problém, protože ActiveRecord nemůže rozpoznat tento řádek jako řádek z tabulky vašeho účtu. AR neanalyzuje váš sql a není si jistý, co dělat s anonymními kortážemi.
Pokud používáte find_by_sql
vaše vybrané atributy nejsou správně namapovány na váš model, ale jsou stále dostupné, takže zkuste:
result.id
result.email
Ale máte také dva způsoby, jak to opravit.
Za prvé (je to velmi hackerské, ale snadné řešení), transformujte svůj sql na Arel
, které platí pro rozsahy:
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"))
... a zavolejte AR odlišnou metodu:
Account.unverified_with_no_associations.select(:id, :email).distinct
Za druhé (je to mnohem lepší řešení):
Nepoužívejte přímo sql. Přepište rozsah pomocí Arel
(https://github.com/rails/arel
) nebo pomocí squeel
(https://github.com/activerecord-hackery/squeel
)