我有一个模型course
has_many subcategories
。我想构建一个页面,显示按子类别分组的课程。到目前为止,我有
@courses = Course.personal_enrichment.order('subcategory_id').page params[:page]
@courses_facet = @courses.group_by(&:subcategory_id)
工作正常,但我需要在视图中显示实际的子类别名称,而不是数字。我已经看到了关于这类事情的其他一些答案,但是大多数人认为你所分组的属性已经是人类可读的。也许我错过了什么?
答案 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)