从rails循环中排除记录 - Spree

时间:2014-01-07 08:43:45

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 spree

我正在使用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

Get.html.erb

<% @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 %>

_product.html.erb

<% 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 %>

1 个答案:

答案 0 :(得分:1)

我认为您应该能够从product.taxons中拒绝您的特色分类单元,例如

product.taxons.reject{|t| t.name == 'Featured'}.each do |taxon|