sql >> Databasteknik >  >> RDS >> PostgreSQL

En situation där ActiveRecord och SQL inte returnerar samma resultat på grund av att okänt OID behandlas som String

Du fick det här problemet eftersom ActiveRecord inte kan känna igen den här raden som rad från din kontotabell. AR analyserar inte din sql och den är inte säker på vad den ska göra med anonym cortage.

Om du använder find_by_sql dina valda attribut är inte mappade till din modell korrekt men fortfarande tillgängliga, så försök:

result.id
result.email

Men du har också två sätt att fixa det.

Först (det är väldigt hackigt men lätt lösning), transformera din sql till Arel , som gäller för omfattningarna:

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

... och anropa AR distinkt metod:

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

Andra (det är mycket bättre lösning):

Använd inte sql direkt. Skriv om ditt omfång med Arel (https://github.com/rails/arel ) eller med squeel (https://github.com/activerecord-hackery/squeel )




  1. Hur kan jag ändra denna beräknade kolumn i SQL Server 2008?

  2. Kontrollera om tabellen ärver från andra tabeller i PostgreSQL

  3. Vilken Visual Studio behöver jag för MySQL?

  4. anropa ett php-skript för varje rad i min databas mysql