sql >> Database teknologi >  >> RDS >> PostgreSQL

En situation, hvor ActiveRecord og SQL ikke returnerer de samme resultater på grund af, at ukendt OID behandles som streng

Du fik dette problem, fordi ActiveRecord ikke kan genkende denne række som række fra din kontotabel. AR analyserer ikke din sql, og den er ikke sikker på, hvad den skal gøre med anonym cortage.

Hvis du bruger find_by_sql dine valgte attributter er ikke knyttet til din model korrekt, men stadig tilgængelige, så prøv:

result.id
result.email

Men du har også to måder at løse det på.

Først (det er meget hackish, men nem løsning), transformer din sql til Arel , der gælder for omfanget:

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

... og kald AR distinct metode:

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

Anden (det er meget bedre løsning):

Brug ikke sql direkte. Omskriv dit omfang med Arel (https://github.com/rails/arel ) eller med squeel (https://github.com/activerecord-hackery/squeel )




  1. Opencart 1.5.1.3 viser specialpris med start- og slutdato på produktvisningssiden

  2. Meget lang åbningstid for SQL-forbindelse

  3. Sikkerhedskopier død MySQL-server

  4. Søgning efter databaseobjekter og tabeldata i SQL Server