这是我想要实现的目标:
member1.name - member1.join_date - 等
member2.name - member2.join_date - 等
...
member1.name - member1.join_date - 等
member2.name - member2.join_date - 等
...
我想要的是与this非常相似,尽管那里的实施对我不起作用。
我已经在我的控制器中走了这么远:
def index
# https://stackoverflow.com/a/17835000/2128691
@user_group_ids = current_user.student_groups.map(&:id)
@students = Student.where('student_group_id IN (?)', @user_group_ids)
# https://stackoverflow.com/a/10083791/2128691
@students_by_group = @students.uniq {|s| s.student_group_id}
@title = "All students"
end
并在我的视图中调用以下内容 -
<% @students_by_group.all.each do |x| %>
<p>
<%= "#{x}" %>
</p>
<% end %>
给出了所有student
个对象的列表。如果我拨打<%= "#{x.name}" %>
或<%= "#{x.created_at}" %>
等,我会得到正确的信息,一切都很棒。
但是现在我已经拥有了所有这些信息,我怎样才能将group.name(在我的代码中为x.student_group.name
)作为该group_name为真的所有学生的标题?
答案 0 :(得分:3)
我认为您需要在group_by
上使用@students_by_group
,如下所示:
@students_by_group = @students_by_group.group_by { |s| s.student_group }
这将返回一个散列,其中键是学生组对象,值是属于该组的学生,然后您可以在视图中执行此操作:
<% @students_by_group.each do |group, students| %>
<h3><%= group.name %></h3>
<% students.each do |x| %>
<p>
<%= "#{x}" %>
</p>
<% end %>
<% end %>
作为补充说明,group_by
会针对每个学生触发查询,因此您可能需要为每个学生急切加载学生组,以获得一些性能提升:
@students = Student.where('student_group_id IN (?)', @user_group_ids).includes(:student_group)