PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Sytuacja, w której ActiveRecord i SQL nie zwracają tych samych wyników, ponieważ nieznany OID jest traktowany jako String

Masz ten problem, ponieważ ActiveRecord nie może rozpoznać tego wiersza jako wiersza z tabeli konta. AR nie analizuje twojego sql i nie jest pewne, co zrobić z anonimowym cortage.

Jeśli używasz find_by_sql wybrane atrybuty nie zostały poprawnie zmapowane do modelu, ale nadal są dostępne, więc spróbuj:

result.id
result.email

Ale masz też dwa sposoby, aby to naprawić.

Pierwszy (to bardzo hackowe, ale łatwe rozwiązanie), przekształć swój sql do Arel , dotyczy to zakresów:

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"))

... i wywołaj odrębną metodę AR:

Account.unverified_with_no_associations.select(:id, :email).distinct

Drugi (to znacznie lepsze rozwiązanie):

Nie używaj bezpośrednio sql. Przepisz swój zakres za pomocą Arel (https://github.com/rails/arel ) lub z 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. django.db.utils.ProgrammingError:relacja app_user nie istnieje podczas testu manage.py

  2. Jak sprawić, by Postgres Copy ignorował pierwszy wiersz dużego pliku txt

  3. użycie Array_append daje mi błąd składni podczas tworzenia funkcji PostgreSQL

  4. HTTP Status 500 - java.lang.NoClassDefFoundError:java/time/temporal/TemporalField podczas uruchamiania aplikacji na OpenShift

  5. PostgreSQL:Identyfikacja powracających użytkowników na podstawie daty - złączenia czy funkcje okna?