2016-06-27 4 views
0

course이 있는데 이는 subcategories입니다. 하위 카테고리별로 코스를 그룹화하여 보여주는 페이지를 만들고 싶습니다. 지금까지, 나는 잘 작동레일에서 belongs_to가있는 클래스에서 group_by를 수행하는 중

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

을 가지고,하지만 난보기가 아닌 수의 실제 하위 범주 이름을 표시해야합니다. 이 유형에 대한 다른 답변을 보았습니다. 그러나 대부분은 그룹화하려는 속성이 이미 사람이 읽을 수 있다고 가정합니다. 어쩌면 내가 뭔가를 놓친거야?

답변

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) 
+1

로큰롤, ​​남자. 그것은 완벽하게 작동했습니다. 고맙습니다! – nickmjones

관련 문제