PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Ситуация, при която ActiveRecord и SQL не връщат същите резултати поради неизвестен OID, който се третира като String

Имате този проблем, защото ActiveRecord не може да разпознае този ред като ред от таблицата на вашия акаунт. AR не анализира вашия sql и не е сигурно какво да прави с анонимния кортаж.

Ако използвате find_by_sql избраните от вас атрибути не са картографирани правилно към вашия модел, но все още са достъпни, така че опитайте:

result.id
result.email

Но имате и два начина да поправите това.

Първо (това е много хакерско, но лесно решение), трансформирайте вашия sql към Arel , които са валидни за обхватите:

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

... и извикване на AR различен метод:

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

Второ (това е много по-добро решение):

Не използвайте sql директно. Пренапишете своя обхват с Arel (https://github.com/rails/arel ) или с 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. Slick 2.0 Общи CRUD операции

  2. Може ли ограничение INITIALLY DEFERRED да бъде дефинирано с помощта на анотация на Hibernate?

  3. Има ли значение редът на таблиците в обединяване, когато се използват LEFT (външни) присъединявания?

  4. Проблеми с Crosstab/Pivot на PostgreSQL

  5. Как да архивирате и възстановите PostgreSQL база данни