您可以使用IN SQL 语句。
list_of_students = Student.where('class = ? AND teacher_id IN (?)', param[:given_class], list_of_teachers.map(&:id))
如果list_of_teachers 是ActiveRecord::Relation(而不是数组),您也可以使用#pluck(:id) 或(来自Rails 4)#ids
Student.where('class = ? AND teacher_id IN (?)', param[:given_class], list_of_teachers.ids)
有几种方法可以编写IN 语句。鉴于您已经有一个where,我将它加入到主要位置。但你也可以写
Student.where('class = ?', param[:given_class]).where(teacher_id: list_of_teachers)
或
Student.where(class: param[:given_class], teacher_id: list_of_teachers)
另请注意,您不需要将教师列表分配给变量。
Student.where(class: param[:given_class], teacher_id: Teacher.where(...).ids)
最后但同样重要的是,如果您的 Teacher 查询很简单,您可能希望使用单个查询和 JOIN。假设您想获取所有名称为 Rose 的教师。
Student.where(class: param[:given_class], teacher_id: Teacher.where(name: 'Rose').ids)
您可以将相同的查询重写为
Student.where(class: param[:given_class]).joins(:teacher).where(teacher: { name: 'Rose' })
or(最后一个更短的表达式)
Student.joins(:teacher).where(class: param[:given_class], teacher: { name: 'Rose' })