2015-02-18 64 views

回答

4

我不确定在老版本的Rails中支持哪种语法,这是我怀疑你的位置。试试这个:

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

是的,这是以前的Rails版本的问题(在我的情况下,它是Rails3)。 – 2015-09-28 13:27:26

1

我从我的MySQL的Rails应用程序切换到PostgreSQL之后经历过这种错误,以及(我的发展环境和创业板名单是在这个岗位的底部)。

该错误似乎是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代码工作没有trigge响错误消息:

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的
  • 红宝石2.1.5p273
  • 的Rails 3.0.3(我知道这是老了......)
  • 的PostgreSQL 9.4(在Windows上)

...这是我的宝石名单的相关部分:

*** 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) 
相关问题