我正在使用related products gem并略微修改了它,但我有一个我无法弄清楚的错误。
基本上,get方法使用搜索器类来查找所有分类并显示6个属于同一类别的产品,在我看来,我只显示前1个类别,因为有些产品有多个类别。
我的问题是,在迁移中我创建了一个名为“Tags”的分类法和一个名为“Featured”的子分类(显示在主页上的产品)然后销毁父分类,因此它不会出现在客户身上面对网站。对于使用精选分类单元标记的所有产品,会针对“is_product_line”错误抛出未定义的方法。所有其他未标记为特色分类的产品都能很好地运作。
当get方法在控制器中构建类别时,我需要一种方法来排除这个类别。我已将其添加到方法中,但不确定如何将其从@categores<< {}
中排除module Spree
class RelatedProductsController < Spree::StoreController
@@display_related_items = 6
def get
product = Product.order("name ASC").find_by_permalink!(params[:permalink])
### Featured is taxonmony without a parent taxon
featured = Spree::Taxon.where(:name => 'Featured')
@categories = []
product.taxons.each do |taxon|
if taxon.taxonomy.is_product_line
@categories << {
:taxon => taxon,
:searcher => build_searcher({ :taxon => taxon.id, :per_page => @@display_related_items })
}
end
end
render layout: false
end
end
end
<% @categories.first(1).each do |category| %>
<%= link_to category[:taxon].pretty_name, spree.nested_taxons_path(category[:taxon].permalink) %>
<%= render :partial => 'products', :locals => { :products => category[:searcher].retrieve_products, :taxon => category[:taxon] } %>
<% end %>
<% if products.any? %>
<% products.each do |product| %>
<div id="product_<%= product.id %>" class="columns large-2" data-hook="products_list_item" itemscope itemtype="http://schema.org/Product">
<div class="product-image">
<%= link_to product_image(product, :itemprop => "image"), product, :itemprop => 'url' %>
</div>
<%= link_to truncate(product.name, :length => 50), product, :class => 'info', :itemprop => "name", :title => product.name %>
<p class="price selling" itemprop="price"><%= display_price(product) %></p>
</div>
<% end %>
<% end %>
答案 0 :(得分:1)
我认为您应该能够从product.taxons中拒绝您的特色分类单元,例如
product.taxons.reject{|t| t.name == 'Featured'}.each do |taxon|