选择Heroku PG错误

时间:2013-06-19 19:15:50

标签: ruby-on-rails postgresql activerecord heroku

我有一段代码在开发环境中运行良好,并在生产中触发错误。这是:

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...

我真的不知道这里有什么问题。

1 个答案:

答案 0 :(得分:2)

DESC是SQL中的保留关键字。 This list of SQL and PostgreSQL keywords是一个很好的参考。要使用保留字作为列名,您需要使用双引号将其转义:

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

在rails中,将其作为文字字符串而不是符号传递:

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