簡體   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