PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Heroku - ActiveRecord::StatementInvalid (PG::Erreur :ERREUR :la colonne demandée n'existe pas

Les chaînes SQL standard utilisent des guillemets simples, les guillemets doubles sont pour les identifiants (tels que les noms de table et de colonne) ; PostgreSQL suit la norme ici, MySQL et SQLite sont moins stricts, d'autres bases de données font d'autres choses avec des degrés de rigueur variables. Dans tous les cas, les guillemets simples pour les littéraux de chaîne SQL doivent fonctionner de la même manière partout.

Vous utilisez des guillemets doubles sur une chaîne SQL :

@holidays = Holiday.find(:all, :conditions => 'state = "requested"')
#------------------------------------------------------^---------^

Vous devez guillemets simples :

@holidays = Holiday.find(:all, :conditions => %q{state = 'requested'})

ou modernisez-le et laissez ActiveRecord s'occuper du devis :

@holidays = Holiday.where(:state => 'requested')

Vous devrez probablement corriger les citations pour celui-ci également :

@holidays = Holiday.find(:all, :conditions => ["approver_id = #{current_user.id}", "state = requested"])

Encore une fois, le moderniser est le moyen le plus simple :

@holidays = Holiday.where(:approver_id => current_user.id, :state => 'requested')

Je suppose que vous développez sur SQLite mais déployez sur PostgreSQL. C'est une mauvaise idée, développez et déployez toujours sur la même pile.