Rails 4.1,Ruby 2.1,Devise,为什么'我的.where()中的'语法错误,意外的tConstant'有多个条件?

时间:2015-04-17 05:47:30

标签: mysql ruby-on-rails ruby ruby-on-rails-4 devise

我从类似的帖子中看到,它通常是前一行中缺少一些关闭字符的情况,但我在这里看不到它。 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

2 个答案:

答案 0 :(得分:2)

运营商为&&and,而不是AND

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

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

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

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

答案 1 :(得分:0)

你可以试试这个:

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