我on Rails的Ruby的一些/ ActiveRecord的代码是给我下面的Postgres的错误:为什么Rails/ActiveRecord会给出一个Postgres SyntaxError“ORDER中的非整数常量”?
PG ::语法错误:错误:非整数常数ORDER
我不知道为什么,因为它是由created_at订购的简单抓取
self.posts.order(created_at: :desc).limit(25)
我该如何改变这种情况?
我on Rails的Ruby的一些/ ActiveRecord的代码是给我下面的Postgres的错误:为什么Rails/ActiveRecord会给出一个Postgres SyntaxError“ORDER中的非整数常量”?
PG ::语法错误:错误:非整数常数ORDER
我不知道为什么,因为它是由created_at订购的简单抓取
self.posts.order(created_at: :desc).limit(25)
我该如何改变这种情况?
我不确定在老版本的Rails中支持哪种语法,这是我怀疑你的位置。试试这个:
self.posts.order("created_at desc").limit(25)
是的,这是以前的Rails版本的问题(在我的情况下,它是Rails3)。 – 2015-09-28 13:27:26
我从我的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
这里是我的开发环境:
...这是我的宝石名单的相关部分:
*** 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)
您能否提供该错误的堆栈跟踪? – 2015-02-18 00:59:18