Rails 4.1,Ruby 2.1,设计,为什么 'syntax error, unexpected tConstant' 在我的 .where() 中有多个条件?

Rails 4.1, Ruby 2.1, Devise, Why 'syntax error, unexpected tConstant' in my .where() with multiple conditions?

我从类似的帖子中看到,这通常是前一行中缺少某些结束字符的情况,但我在这里没有看到。 Courses 资源嵌套在 Schools 中,我可以打印出 user_id 和 school.id。

错误似乎出现在具有多个条件的 Course.where 子句中 (user_id: current_user.id AND school_id: @school.id) 上面的单条件 where 子句似乎工作得很好。

courses_controller.rb

class CoursesController < ApplicationController

  before_action :set_school

  helper_method :calculated_grade_stub


  # GET /courses
  # GET /courses.json
  def index
    if @school.nil?
      @courses = Course.where(user_id: current_user.id)
    else
      @courses = Course.where(user_id: current_user.id AND school_id: @school.id)
    end
  end

运算符是&&and,不是AND

然而,这不是问题的根本原因:您似乎对 Hash 文字的一般语法感到困惑。 Hash 文字中的条目由逗号分隔,而不是由运算符分隔:

@courses = Course.where(user_id: current_user.id, school_id: @school.id)

另请注意,if 是一个表达式,因此 returns 是一个值,因此您可以轻松将该方法重构为

def index
  @courses = if @school.nil?
    Course.where(user_id: current_user.id)
  else
    Course.where(user_id: current_user.id, school_id: @school.id)
  end
end

你可以试试这个:

  @courses = Course.where('user_id = ? AND school_id = ?',current_user.id , @school.id)