繁体   English   中英

Rails:ActiveRecord :: StatementInvalid调试(postgreSQL)

[英]Rails: ActiveRecord::StatementInvalid Debug (postgreSQL)

这让我很难调试它。 在我从SQLite3迁移到PostgreSQL之前,它运行良好。 对我来说奇怪的是,还有另一个控制器具有与此几乎相同的代码,并且该页面运行良好。 有人可以帮我吗?

错误:

ActiveRecord::StatementInvalid in Good_posts#index

Showing c:/ruby/mangfeel/app/views/good_posts/index.html.erb where line #3 raised:

PG::Error: ERROR:  syntax error at or near "desc"
LINE 1: ...  "good_posts".* FROM "good_posts"  ORDER BY like desc LIMIT...
                                                         ^
: SELECT  "good_posts".* FROM "good_posts"  ORDER BY like desc LIMIT 15 OFFSET 0

引起问题的good_posts_controller

def index
 @good_posts = GoodPost.paginate(:page => params[:page], order: 'like desc', per_page: 15)
 @good_client_ip = request.remote_ip.encode! 'utf-8'

 respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @good_posts }
 end
end

post_controller ,具有类似的代码,但工作正常:

def index
 @posts = Post.paginate(:page => params[:page], order: 'created_at desc', per_page: 15)
 @client_ip = request.remote_ip.encode! 'utf-8'

 respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @posts }
 end
end

我感谢所有的帮助!

LIKE是运算符,因此除非将其双引号引起来,否则不能将其用作列名:

@good_posts = GoodPost.paginate(... order: '"like" desc' ...)

每当ActiveRecord在某些SQL中生成列名时,它将为您引用该列名。 因此.where(:like => 11)将以where "like" = 11形式发送到数据库,每个人都很高兴。 当您在SQL代码段中编写列名(例如.where('"like" = ?', 11) )时,必须将其双引号与模式匹配运算符区分开。 如果将列重命名为与关键字不冲突的内容(例如likesnumber_of_likes ),则会更快乐

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM