为了简单起见,我有一个Course
和一个Student
模型,“课程”有很多学生,而“学生”属于课程(我知道这是一个愚蠢的例子,因为“学生”只能是与1门课程相关联,但无论如何)
我在课程模型中建立了一个范围,以获取学生人数超过“ x”的课程:
scope :with_more_students_than, -> (students_number) { joins(:students).having("count(course_id) > #{students_number}").group('course_id') }
然后在控制器中,我获得了超过5名学生的课程:
@courses_with_more_than_x_students = Course.with_more_students_than(5).includes(:students)
然后我给他们看:
<% @courses_with_more_than_x_students.each_with_index do |course, i| %>
<h2><%= "#{i + 1} #{course}" %></h2>
<% course.students.each_with_index do |student, j| %>
<p><%= "#{j + 1} #{student}" %></p>
<% end %>
<% end %>
使用.includes(:students)
时,它仅显示最后一个学生,没有它,我会看到这些课程的每个学生,为什么?
答案 0 :(得分:0)
尝试
@courses_with_more_than_x_students = Course.with_more_students_than(5).preload(:students)
我们可能有不同的数据库,因此它对我的作用范围略有不同:
scope :with_more_students_than, -> (students_number) {
joins(:students).having("count(courses.id) > #{students_number}").group('courses.id')
}
与students.course_id
列配合使用。