Anda mendapatkan masalah ini karena ActiveRecord tidak dapat mengenali baris ini sebagai baris dari tabel akun Anda. AR tidak mengurai sql Anda dan tidak yakin apa yang harus dilakukan dengan kortase anonim.
Jika Anda menggunakan find_by_sql
atribut yang Anda pilih tidak dipetakan ke model Anda dengan benar tetapi masih dapat diakses, jadi cobalah:
result.id
result.email
Tetapi Anda juga memiliki dua cara untuk memperbaikinya.
Pertama (ini solusi yang sangat retas tetapi mudah), ubah sql Anda menjadi Arel
, yang berlaku untuk cakupan:
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"))
... dan panggil metode AR yang berbeda:
Account.unverified_with_no_associations.select(:id, :email).distinct
Kedua (ini solusi yang jauh lebih baik):
Jangan gunakan sql secara langsung. Tulis ulang cakupan Anda dengan Arel
(https://github.com/rails/arel
) atau dengan squeel
(https://github.com/activerecord-hackery/squeel
)