为什么我只获得包含关联的最后一个关联记录?

时间:2019-06-03 01:58:47

标签: ruby-on-rails ruby-on-rails-5

为了简单起见,我有一个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)时,它仅显示最后一个学生,没有它,我会看到这些课程的每个学生,为什么?

1 个答案:

答案 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列配合使用。