我正在开发一个RoR WebApp。我正在尝试根据分类法在搜索页面上对结果进行分组。我想要做的是显示一个类别的标题,并列出该类别下的所有结果。类似的东西:
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 %>
令人惊讶的是,它从一个新行开始第二类,但以下类别出现混乱,类似
CAT1
产品
CAT2
产品 CAT3
产品
图片可以提供更好的主意。
我真的很惊讶为什么它只适用于一次迭代。有人可以帮我解决这个问题。 非常感谢
答案 0 :(得分:3)
方式,视图的逻辑太多了。只需在控制器中使用group_by
,即可为您提供名称与产品数组的映射:
products = Product.includes(:taxon).group_by { |p| p.taxon.name }