ActiveRecord加入 - belongs_to和has_many之间的顺序

时间:2015-02-14 16:38:29

标签: ruby-on-rails join activerecord

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

我有三种模式:

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)

2 个答案:

答案 0 :(得分:1)

为了构建诸如

之类的列表
[
 {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中的保留字。)

答案 1 :(得分:0)

您可以在此页面找到答案:

RailsGuides: Active Record Query Interface

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