PostgreSQL 语法错误 Rails 4
PostgreSQL syntax error Rails 4
我在 heroku 上部署了一个 Rails 4 应用程序。
在使用 MySQL 进行开发时,我没有收到任何错误。
在 heroku 的生产环境中,我得到以下信息:
Mar 16 09:40:22 squareshaped app/web.1: Started GET "/" for 87.83.45.218 at 2015-03-16 16:40:22 +0000
Mar 16 09:40:22 squareshaped app/web.1: Processing by PagesController#index as HTML
Mar 16 09:40:23 squareshaped app/web.1: PG::SyntaxError: ERROR: syntax error at or near ")"
Mar 16 09:40:23 squareshaped app/web.1: LINE 1: SELECT COUNT(*) FROM "courses" WHERE "courses"."id" IN ()
Mar 16 09:40:23 squareshaped app/web.1: ^
Mar 16 09:40:23 squareshaped app/web.1: : SELECT COUNT(*) FROM "courses" WHERE "courses"."id" IN ()
Mar 16 09:40:23 squareshaped app/web.1: Rendered pages/index.html.erb within layouts/application (69.8ms)
Mar 16 09:40:23 squareshaped app/web.1: ActionView::Template::Error (PG::SyntaxError: ERROR: syntax error at or near ")"
Mar 16 09:40:23 squareshaped app/web.1: LINE 1: SELECT COUNT(*) FROM "courses" WHERE "courses"."id" IN ()
Mar 16 09:40:23 squareshaped app/web.1: ^
我认为这可能是因为我的代码要求它在空数组中查找值。所以我添加了一个 if 语句,这样它就不会查找数组是否为空。这是行不通的。
def index
@courses = Course.limit(7).order(created_at: :desc)
@reviews = Review.limit(7).order(created_at: :desc)
if user_signed_in?
# Find peer recommended courses
@peers = User.where("position LIKE ?", current_user.position).where('id <> ?', current_user.id)
@peer_recommended_courses = []
@peers.each do |peer|
@peer_recommended_courses << peer.reviews.where(recommended: true).pluck(:course_id)
end
if @peer_recommended_courses.empty?
@peer_recommendations = []
else
@peer_recommendations = Course.where(id: @peer_recommended_courses)
end
#Find company recommended courses
@colleagues = User.where("company LIKE ?", current_user.company).where('id <> ?', current_user.id)
@colleague_recommended_courses = []
@colleagues.each do |peer|
@colleague_recommended_courses << peer.reviews.where(recommended: true).pluck(:course_id)
end
if @colleague_recommended_courses.empty?
@colleague_recommendations = []
else
@colleague_recommendations = Course.where(id: @colleague_recommended_courses)
end
end
end
如果有人能解释为什么会出现此错误,我将不胜感激。
p.s。为可怕的编码道歉,我是一个菜鸟,我认为其中大部分可能应该在我的课程模型中。我在做这个工作。只想发布此更新。
查询仍然是 运行,因为 @peer_recommended_courses
不是空数组。
@peer_recommended_courses = []
@peers.each do |peer|
@peer_recommended_courses << peer.reviews.where(recommended: true).pluck(:course_id)
end
如果没有推荐的同行评审,那么 @peer_recommended_courses
的值现在实际上是 [[]]
而不仅仅是 []
。展开数组以便 Arel 正确处理查询(或在 empty?
检查之前展开数组):
@peer_recommendations = Course.where(id: @peer_recommended_courses.flatten)
我在 heroku 上部署了一个 Rails 4 应用程序。
在使用 MySQL 进行开发时,我没有收到任何错误。
在 heroku 的生产环境中,我得到以下信息:
Mar 16 09:40:22 squareshaped app/web.1: Started GET "/" for 87.83.45.218 at 2015-03-16 16:40:22 +0000
Mar 16 09:40:22 squareshaped app/web.1: Processing by PagesController#index as HTML
Mar 16 09:40:23 squareshaped app/web.1: PG::SyntaxError: ERROR: syntax error at or near ")"
Mar 16 09:40:23 squareshaped app/web.1: LINE 1: SELECT COUNT(*) FROM "courses" WHERE "courses"."id" IN ()
Mar 16 09:40:23 squareshaped app/web.1: ^
Mar 16 09:40:23 squareshaped app/web.1: : SELECT COUNT(*) FROM "courses" WHERE "courses"."id" IN ()
Mar 16 09:40:23 squareshaped app/web.1: Rendered pages/index.html.erb within layouts/application (69.8ms)
Mar 16 09:40:23 squareshaped app/web.1: ActionView::Template::Error (PG::SyntaxError: ERROR: syntax error at or near ")"
Mar 16 09:40:23 squareshaped app/web.1: LINE 1: SELECT COUNT(*) FROM "courses" WHERE "courses"."id" IN ()
Mar 16 09:40:23 squareshaped app/web.1: ^
我认为这可能是因为我的代码要求它在空数组中查找值。所以我添加了一个 if 语句,这样它就不会查找数组是否为空。这是行不通的。
def index
@courses = Course.limit(7).order(created_at: :desc)
@reviews = Review.limit(7).order(created_at: :desc)
if user_signed_in?
# Find peer recommended courses
@peers = User.where("position LIKE ?", current_user.position).where('id <> ?', current_user.id)
@peer_recommended_courses = []
@peers.each do |peer|
@peer_recommended_courses << peer.reviews.where(recommended: true).pluck(:course_id)
end
if @peer_recommended_courses.empty?
@peer_recommendations = []
else
@peer_recommendations = Course.where(id: @peer_recommended_courses)
end
#Find company recommended courses
@colleagues = User.where("company LIKE ?", current_user.company).where('id <> ?', current_user.id)
@colleague_recommended_courses = []
@colleagues.each do |peer|
@colleague_recommended_courses << peer.reviews.where(recommended: true).pluck(:course_id)
end
if @colleague_recommended_courses.empty?
@colleague_recommendations = []
else
@colleague_recommendations = Course.where(id: @colleague_recommended_courses)
end
end
end
如果有人能解释为什么会出现此错误,我将不胜感激。
p.s。为可怕的编码道歉,我是一个菜鸟,我认为其中大部分可能应该在我的课程模型中。我在做这个工作。只想发布此更新。
查询仍然是 运行,因为 @peer_recommended_courses
不是空数组。
@peer_recommended_courses = []
@peers.each do |peer|
@peer_recommended_courses << peer.reviews.where(recommended: true).pluck(:course_id)
end
如果没有推荐的同行评审,那么 @peer_recommended_courses
的值现在实际上是 [[]]
而不仅仅是 []
。展开数组以便 Arel 正确处理查询(或在 empty?
检查之前展开数组):
@peer_recommendations = Course.where(id: @peer_recommended_courses.flatten)