PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Situasi di mana ActiveRecord dan SQL tidak mengembalikan hasil yang sama karena OID yang tidak dikenal diperlakukan sebagai String

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 )




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara awalan nama urutan?

  2. Periksa apakah NULL ada di array Postgres

  3. FULL OUTER JOIN untuk menggabungkan tabel dengan PostgreSQL

  4. Tidak dapat terhubung ke https://api.elephantsql.com dari pg admin

  5. Dapatkan Kesalahan:Anda harus menginstal setidaknya satu paket postgresql-client-<version> saat digunakan ke heroku