2013-06-19 61 views
0

我有一段代碼在開發環境中工作良好,並在生產中發出錯誤。那就是:Heroku選擇的PG錯誤

venue.badges.where(:active => true).select([:title, :desc, :bonus]).each do |badge| 

雖然MySQL的本地數據庫工作,它觸發此生產:

ActiveRecord::StatementInvalid (PG::Error: ERROR: syntax error at or near "desc" 
: SELECT title, desc, bonus FROM "badges" WHERE "badges"."venue_id" = 22 AND "badges"."active" = 't'): 
LINE 1: SELECT title, desc, bonus FROM "badges" WHERE "badges"."ven... 

我真的不明白什麼是錯在這裏。

+0

有一件事情是錯的是你在一個數據庫之上開發並部署在另一個之上,這只是一個痛苦和痛苦的捷徑。數據庫之間有很多細微的差別,沒有ORM可以保護你免受這些差異的影響。 –

回答

2

DESC是SQL中的保留關鍵字。 This list of SQL and PostgreSQL keywords是一個很好的參考。要使用保留字作爲列名則需要用雙引號逃避它:

SELECT title, "desc", bonus FROM badges WHERE ... 

而在軌道,把它作爲一個字符串,而不是一個符號:

venue.badges.where(:active => true).select([:title, '"desc"', :bonus]).each do |badge| 
+1

或者更好的是,將該列重命名爲不是保留字的內容,從長遠來看這將不那麼痛苦。 –

+0

非常感謝,夥計們!你幫了我很多! –

相關問題