0

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

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

我真的不明白这里有什么问题。

4

1 回答 1

2

DESC 是 SQL 中的保留关键字。这个 SQL 和 PostgreSQL 关键字列表是一个很好的参考。要将保留字用作列名,您需要用双引号对其进行转义:

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

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

venue.badges.where(:active => true).select([:title, '"desc"', :bonus]).each do |badge|
于 2013-06-19T19:51:17.573 回答