为什么Rails / ActiveRecord在ORDER中给出Postgres SyntaxError“非整数常量”?

我有一些Ruby on Rails / ActiveRecord代码,它给我以下Postgres错误:

PG :: SyntaxError:ERROR:ORDER中的非整数常量

我不确定为什么因为它是由created_at命令的简单提取

self.posts.order(created_at: :desc).limit(25) 

我该怎么做才能改变这个?

我不确定Rails的旧版本是否支持语法,这是我怀疑你的版本。 试试这个:

 self.posts.order("created_at desc").limit(25) 

在将我的Rails应用程序从MySQL切换到PostgreSQL后,我也遇到了这个错误(我的开发环境和Gem列表位于本文的底部)。

该错误似乎是由PostgreSQL引起的,期望SQL查询中的列名称被双引号,因为我能够通过将哈希格式的“.order()”参数更改为文字字符串来消除错误:

此Rails代码触发错误:

 ModelName.where(:attribute => self.id).order(col1: :desc, col2: :asc) 

……以及由此产生的错误:

 Rendered C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms) ModelName Load (1.0ms) SELECT "model_name".* FROM "model_name" WHERE ("model_name"."attribute" = 14) ORDER BY '{:col1=>:desc, :col2=>:asc}' PG::SyntaxError: ERROR: non-integer constant in ORDER BY LINE 1: ...E ("model_name"."attribute" = 14) ORDER BY '{:col1=... ^ 

这个Rails代码可以在不触发错误消息的情况下工作:

 ModelName.where(:attribute => self.id).order("\"col1\" desc, \"col2\" asc") 

我知道PostgreSQL能够正确解释非引用标识符,但在这种情况下ActiveRecord生成的查询格式似乎与Postgresql不明确。 以下是PostgreSQL查询语法的说明: http : //www.postgresql.org/docs/9.1/static/sql-syntax-lexical.html

这是我的开发环境:

  • Windows 7的
  • Ruby 2.1.5p273
  • Rails 3.0.3(我知道它已经老了…)
  • PostgreSQL 9.4(在Windows上)

……这是我gem清单的相关部分:

 *** LOCAL GEMS *** abstract (1.0.0) afm (0.2.2) arel (2.0.10) builder (2.1.2) bundler (1.7.7) hashery (2.1.1) i18n (0.6.11) mysql (2.9.1) pg (0.18.1 x86-mingw32) rack (1.2.8) rails (3.0.3) railties (3.0.3) rake (0.9.2.2) ruby-rc4 (0.1.5) sequel (3.31.0) valkyrie (0.0.2)