sql >> Databáze >  >> RDS >> PostgreSQL

Heroku – ActiveRecord::StatementInvalid (PG::Error:ERROR:požadovaný sloupec neexistuje

Standardní SQL řetězce používají jednoduché uvozovky, dvojité uvozovky jsou pro identifikátory (jako jsou názvy tabulek a sloupců); PostgreSQL se zde řídí standardem, MySQL a SQLite jsou méně přísné, jiné databáze dělají jiné věci s různou mírou přísnosti. V každém případě by jednoduché uvozovky pro řetězcové literály SQL měly fungovat všude stejně.

V řetězci SQL používáte dvojité uvozovky:

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

Musíte zadat jednoduché uvozovky:

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

nebo jej modernizujte a nechte ActiveRecord, aby se s citací vypořádal:

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

Pravděpodobně budete muset opravit citaci i u tohoto:

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

Opět platí, že modernizace je nejjednodušší způsob:

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

Hádám, že vyvíjíte na SQLite, ale nasazujete na PostgreSQL. To je špatný nápad, vždy vyvíjet a nasazovat na stejném zásobníku.




  1. Jak odstranit poslední záznam (za podmínky) z tabulky v MySql

  2. COUNT (DISTINCT column_name) Nesrovnalosti vs. COUNT (column_name) v SQL Server 2008?

  3. MySQL:Jak načíst data pomocí levého spojení, pokud sloupec obsahuje více ID?

  4. Převeďte SQL WHERE IN na JOIN