Sie haben dieses Problem, weil ActiveRecord diese Zeile nicht als Zeile aus Ihrer Kontotabelle erkennen kann. AR analysiert Ihr SQL nicht und es ist nicht sicher, was mit anonymem Cortage zu tun ist.
Wenn Sie find_by_sql
verwenden Ihre ausgewählten Attribute sind Ihrem Modell nicht richtig zugeordnet, aber immer noch zugänglich, versuchen Sie es also:
result.id
result.email
Aber Sie haben auch zwei Möglichkeiten, das zu beheben.
Zuerst (es ist eine sehr hackige, aber einfache Lösung), wandeln Sie Ihr SQL in Arel
um , die für die Bereiche gilt:
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"))
... und rufe die eindeutige AR-Methode auf:
Account.unverified_with_no_associations.select(:id, :email).distinct
Zweiter (es ist viel bessere Lösung):
Verwenden Sie SQL nicht direkt. Schreiben Sie Ihren Geltungsbereich mit Arel
neu (https://github.com/rails/arel
) oder mit squeel
(https://github.com/activerecord-hackery/squeel
)