代码之家  ›  专栏  ›  技术社区  ›  mstrom

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

  •  0
  • mstrom  · 技术社区  · 7 年前

    我有以下关系:

    Teacher hasMany Students hasOne Desk
    

    工作:

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

    我在想这样的事情可能行得通,但我的语法不正确

    teacher.students.where(:desk.some_field=>true)
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Cyzanfar    7 年前

    下面是根据与学生关联的桌面实例中的a条件,让所有学生与特定教师关联的方法:

    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