ActiveRecords 加入 - belongs_to 之间的顺序并且有很多

ActiveRecords joins - order between belongs_to and has many

这似乎是一个简单的问题,但我已经找了一段时间没有找到答案...

我有三个模型:

class Room < ActiveRecord::Base
  has_many :classes
end

class Classe < ActiveRecord::Base
  belongs_to :teachers
  belongs_to :rooms
end

class Teacher < ActiveRecord::Base
  has_many :classes
end

根据老师的名字,我想得到他的所有 类 以及与每个 类 相关联的房间。我已经尝试了 joinsincludes 的查询组合,但无法正确...

此外,Teacher.joins(:classes) 有效但 Classe.joins(:teachers) 无效的原因是什么?

你可以在这个页面找到你的答案:

RailsGuides: Active Record Query Interface

Teacher.where(name: "Joe").joins(:classes).joins(:rooms)

为了构建列表如

[
 {teacher_id: 5, class_id: 9, room_id: 3},
 {teacher_id: 5, class_id: 10, room_id: 2},
 ...
]

对于单个教师,尝试

Teacher.find(5).classes.map do |klass|
  {
    teacher_id: klass.teacher_id,
    class_id: klass.id,
    room_id: klass.room_id
  }
end

(我在这里使用 klass 因为 class 是 Ruby 中的保留字)。