2013-11-19 2 views
0

Я работаю над RoR WebApp. Я пытаюсь сгруппировать результаты на странице поиска, основываясь на их таксономии. Я хочу показать заголовок для категории и перечислить все результаты в этой категории. Что-то вроде:Ruby on Rails: группировка результатов поиска по категориям

CAT 1
продукты

CAT2
продукты

cat3
.
.

Я пытаюсь, используя следующий код:

<% if products.any? %>    #products is the list of search results 
    <%= render :partial=> 'product_listing_feature', :locals => {:scope => scope, :scope_type => scope_type} %> 
    <div id="ql_product"></div> 
    <div class="product_rows"> 
     <%taxons.each do |taxon|%>  # taxons contains the list of unique categories in products 
     <div class = "product_row"> 
      <h1><%=taxon%></h1> 
      <% taxonProducts = Array.new %> 
      <% products.each do |product| %> 
      <%@ptaxon = product.get_taxonomy%> 
      <%if @ptaxon == taxon%> 
       <% taxonProducts.push(product) %> 
      <% end %> 
      <% end %> 
      <div class ="featured_product_list"> 
       <ul class = "featured_products"> 
       <div class = "page"> 
        <%= render :partial=> 'product_listing', :locals=>{:collection=> taxonProducts} %>   
       </div> 
       </ul> 
      </div> 
     </div> 
     <% end %> 
    </div> 
<% end %> 

Неожиданно начинается 2-й категории с новой строки, но следующие категории появились перемешалось, что-то вроде

Cat1
продукции

CAT2
pr oducts cat3
продукты

This картина даст лучшее представление.

Я действительно удивлен, почему он работает только для одной итерации. Может кто-то, пожалуйста, помогите мне исправить это. Большое спасибо

ответ

3

Путь, слишком много логики для просмотра. Просто используйте group_by в контроллере, который даст вам отображение имен массивов продуктов:

products = Product.includes(:taxon).group_by { |p| p.taxon.name } 
+0

Я согласен, что код грязный. Но группировка - это не проблема. Я могу группировать продукты, то есть продукты появляются под правильной таксономией. Но формат страницы поиска неверен. Необходимо начинать каждую категорию с новой строки, которая в настоящее время происходит только для 2-й категории – nish

Смежные вопросы