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)