J'ai rencontré des problèmes en déployant mon code rails sur Heroku car mon environnement de développement était défini sur sqllite3 par défaut. Ceci est l'instantané journal suivant:Migration de SQLlite3 vers PostgreSQL (Déployé vers Heroku)
ActiveRecord::StatementInvalid (PG::Error: ERROR: syntax error at or near ":"
2012-05-25T14:11:55+00:00 app[web.1]:
2012-05-25T14:11:55+00:00 app[web.1]: LINE 1: ...LECT "records".* FROM "records" WHERE (TIMESTAMP(:order) >=...
2012-05-25T14:11:55+00:00 app[web.1]: : SELECT "records".* FROM "records" WHERE (TIMESTAMP(:order) >= '2011-05-25 00:00:00' and TIMESTAMP(:order) <= '2012-05-25 23:59:59') ORDER BY created_at):
2012-05-25T14:11:55+00:00 app[web.1]: app/controllers/records_controller.rb:20:in `index'
Le fragment de code de mon fichier contrôleur:
opts = {:order => "created_at"}
opts[:conditions] = (@start_date.nil? ? "" : "TIMESTAMP(created_at::text) >= '#{@start_date.to_s(:db)}'")
opts[:conditions] += ((@start_date.nil? || @end_date.nil?) ? "" : " and ")
opts[:conditions] += (@end_date.nil? ? "" : "TIMESTAMP(created_at::text) <= '#{@end_date.to_s(:db)}'")
A l'origine, j'avais un « DATETIME » où vous avez TIMESTAMP donc je commutées et les problèmes encore obtenir. Le contexte de ce code est que je suis en cours d'exécution d'une requête entre les dates avec le format suivant: 2011-05-25 00:00:00
Je ne suis pas vraiment un gars de Ruby mais il semble que ': order' ne soit pas substitué correctement à' created_at', à la place le symbole lui-même est utilisé. En outre, il suffirait d'écrire '[...] WHERE created_at <= '2011-05-25 00:00:00' [...]' – DrColossos