![](/img/trans.png)
[英]ActiveRecord::StatementInvalid in ContactController rails & 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)
)时,必须将其双引号与模式匹配运算符区分开。 如果将列重命名为与关键字不冲突的内容(例如likes
或number_of_likes
),则会更快乐
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.