基于其他元素选择元素

时间:2015-02-16 16:15:40

标签: ruby-on-rails ruby activerecord

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

我想创建一个教师名单,并在他们的名字下面:这个教师有学生的班级表和这些学生的数量。或多或少这样的事情:

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

我如何检查教师是否有来自每个班级的学生,然后只计算属于这个特定教师和班级的学生?

1 个答案:

答案 0 :(得分:0)

您可以执行查询以急切加载课程和学生:

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

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

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

我认为老师和班级都有名字。可能有更好的方法使用像has_many这样的东西,但我现在看不到它。

另一方面,你不应该命名你的对象Class它会给你带来很多我想过的问题,因为它已经在ruby中定义了http://ruby-doc.org//core-2.2.0/Class.html。我称之为类似于SchoolClass以避免冲突。