基于其他元素的元素选择

Selection of elements based on other elements

class Teacher < ActiveRecord::Base
   has_many :students
end

class Class <ActiveRecord::Base
   has_many :students
end

class Student <ActiveRecord::Base
   belongs_to :teacher
   belongs_to :class
end

我想创建一个教师列表,并在他们的名字下方:table 和 class 个教师从中有学生和学生人数。大致是这样的:

Teacher XYZ:
Class 1A  |  3 students
Class 3D | 2 students

我如何检查老师是否有每个 class 的学生,然后只计算属于该特定老师和 class 的学生?

您可以执行查询以预加载 classes 和学生:

@teachers = Teacher.includes(students: :class)

然后我会在视图中使用 group_by 按 class 对学生进行分组。

<% @teachers.each do |teacher| %>
  <%= teacher.name %>
  <% teacher.students.group_by(&:class).each do |class, students| %>
    <%= class.name %> | <%= students.size %>
  <% end %>
<% end %>

我假设老师和 class 都有名字。可能有更好的方法使用 has_many 之类的东西,但我现在看不到它。

另外请注意,您不应该将您的对象命名为 Class,这会给您带来很多我认为的问题,因为它已经在 ruby 中定义 http://ruby-doc.org//core-2.2.0/Class.html。我将其称为 SchoolClass 之类的名称以避免冲突。