Je hebt dit probleem omdat ActiveRecord deze rij niet kan herkennen als rij uit je accounttabel. AR ontleedt je sql niet en het weet niet wat te doen met anonieme cortage.
Als u find_by_sql
. gebruikt uw geselecteerde kenmerken zijn niet correct toegewezen aan uw model, maar zijn nog steeds toegankelijk, dus probeer:
result.id
result.email
Maar je hebt ook twee manieren om dat op te lossen.
Eerste (het is een erg hackachtige maar makkelijke oplossing), transformeer je sql naar Arel
, die geldig zijn voor de scopes:
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"))
... en roep AR afzonderlijke methode aan:
Account.unverified_with_no_associations.select(:id, :email).distinct
Tweede (het is een veel betere oplossing):
Gebruik sql niet rechtstreeks. Herschrijf uw bereik met Arel
(https://github.com/rails/arel
) of met squeel
(https://github.com/activerecord-hackery/squeel
)