ActiveRecord查询基于深度嵌套的条件检索子对象

时间:2017-11-02 02:10:52

标签: ruby-on-rails activerecord rails-activerecord

我有以下关系:

Teacher hasMany Students hasOne Desk

我需要根据Desk中的条件,使用Teacher实例检索所有Student对象。我使用学生模型工作,但我无法使用教师实例工作。

工作:

Student.joins(:desk).where(:id => some_id, :desks => {:some_field=>true})

正在思考这些方面的内容可能有效,但我无法正确理解

teacher.students.where(:desk.some_field=>true)

1 个答案:

答案 0 :(得分:1)

根据与学生相关的桌面实例中的条件,您可以采取以下措施让所有学生与特定教师相关联:

Teacher.first.students.joins(:desk).where(desk: {some_field: 1})

在SQL中是这样的:

  SELECT  `teachers`.* FROM `teachers`
  SELECT `students`.* FROM `students` INNER JOIN `desks` ON `desks`.`students_id` = `students`.`id` WHERE `students`.`teacher_id` = some_id AND `desks`.`some_field` = 1