在Rails中使用belongs_to在class上执行group_by

时间:2016-06-27 18:07:12

标签: ruby-on-rails

我有一个模型course has_many subcategories。我想构建一个页面,显示按子类别分组的课程。到目前为止,我有

@courses = Course.personal_enrichment.order('subcategory_id').page params[:page] @courses_facet = @courses.group_by(&:subcategory_id)

工作正常,但我需要在视图中显示实际的子类别名称,而不是数字。我已经看到了关于这类事情的其他一些答案,但是大多数人认为你所分组的属性已经是人类可读的。也许我错过了什么?

1 个答案:

答案 0 :(得分:1)

渲染视图时,您只需访问引用模型的属性即可。由于group_by返回哈希值,您可以执行以下操作:

<% @courses_facet.each do |subcategory_id, courses| %>
  <% subcategory_name = courses.first.subcategory.name rescue nil %>
  <label><%= subcategory_name %></label>
<% end%>

除非缓存相关的子类别模型,否则将生成N + 1个查询以获取子类别名称。避免这种情况的一种方法是将子类别记录包含在初始结果集中。

@courses.includes(:subcategories).group_by(&:subcategory_id)