0

これをデバッグするのに苦労しています。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

私はすべての助けに感謝します!

4

1 に答える 1

1

LIKE は演算子であるため、二重引用符で囲まない限り列名として使用できません。

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

ActiveRecord が SQL で列名を生成するときはいつでも、列名を引用符で囲みます。.where(:like => 11)としてデータベースに送信され、誰もwhere "like" = 11が満足しています。列名を SQL スニペット ( など.where('"like" = ?', 11)) に記述するときは、パターン マッチング演算子と区別するために二重引用符で囲む必要があります。列の名前をキーワードと競合しない名前 (likesまたは など)に変更すると、より快適になります。number_of_likes

于 2012-11-19T07:32:53.417 に答える