我有一段代码在开发环境中运行良好,并在生产中触发错误。这是:
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 :(得分: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|