[英]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.