2016-04-06 3 views
1

Я работаю над Rails-приложением со Spree Commerce.Невозможно отобразить все товары

Я пытаюсь показать все продукты в таксон, потому что я их использование не как категории, но в какой-то реестр.

Итак, я редактирую /app/views/spree/taxons/show.html.erb. Especifically эта линия:

<%= render partial: 'spree/shared/products', locals: { products: @products, taxon: @taxon } %> 

Изменение его:

<%= render :partial => 'spree/shared/products', :locals => { :products => @products } %> 

Но она по-прежнему говорит: "Нет товаров не найдено". Но в моем указателе они показаны.

Итак, как я могу правильно показать все продукты?

Заранее спасибо.

ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] 
Rails 4.2.5 
Spree 3.0.4 

В соответствии с просьбой:

1) Это шоу из продуктов

<% @body_id = 'product-details' %> 

<% cache [I18n.locale, current_currency, @product, @product.possible_promotions] do %> 
    <div data-hook="product_show" itemscope itemtype="https://schema.org/Product"> 
    <div class="col-md-4" data-hook="product_left_part"> 
     <div data-hook="product_left_part_wrap"> 
     <div id="product-images" data-hook="product_images"> 
      <div id="main-image" class="panel panel-default" data-hook> 
      <div class="panel-body text-center"> 
       <%= render :partial => 'image' %> 
      </div> 
      </div> 
      <div id="thumbnails" data-hook> 
      <%= render :partial => 'thumbnails' %> 
      </div> 
     </div> 

     <div data-hook="product_properties"> 
      <%= render :partial => 'properties' %> 
     </div> 

     <div data-hook="promotions"> 
      <%= render :partial => 'promotions' %> 
     </div> 
     </div> 
    </div> 

    <div class="col-md-8" data-hook="product_right_part"> 
     <div data-hook="product_right_part_wrap"> 
     <div id="product-description" data-hook="product_description"> 
      <h1 class="product-title" itemprop="name"><%= @product.name %></h1> 

      <div class="well" itemprop="description" data-hook="description"> 
      <%= product_description(@product) rescue Spree.t(:product_has_no_description) %> 
      </div> 

      <div id="cart-form" data-hook="cart_form"> 
      <%= render :partial => 'cart_form' %> 
      </div> 
     </div> 

     <%= render :partial => 'taxons' %> 
     </div> 
    </div> 
    </div> 
<% end %> 

2) Показать от таксонов

<h1 class="taxon-title"><%= @taxon.name %></h1> 

<% content_for :sidebar do %> 
    <div data-hook="taxon_sidebar_navigation"> 
    <%= render partial: 'spree/shared/taxonomies' %> 
    <%= render partial: 'spree/shared/filters' if @taxon.leaf? %> 
    </div> 
<% end %> 

<div data-hook="taxon_products"> 
    <%= render partial: 'spree/shared/products', locals: { products: @products, taxon: @taxon } %> 
</div> 

<% unless params[:keywords].present? %> 
    <div data-hook="taxon_children"> 
    <% cache [I18n.locale, @taxon] do %> 
     <%= render partial: 'taxon', collection: @taxon.children %> 
    <% end %> 
    </div> 
<% end %> 

3) Это, как я сделать в моей индекс

<div data-hook="homepage_products"> 
    <% cache(cache_key_for_products) do %> 
    <%= render :partial => 'spree/shared/products', :locals => { :products => @products } %> 
    <% end %> 
</div> 

4) _products.html.erb

<% 
    paginated_products = @searcher.retrieve_products if params.key?(:keywords) 
    paginated_products ||= products 
%> 

<% content_for :head do %> 
    <% if paginated_products.respond_to?(:num_pages) %> 
    <%= rel_next_prev_link_tags paginated_products %> 
    <% end %> 
<% end %> 

<div data-hook="products_search_results_heading"> 
    <% if products.empty? %> 
    <div data-hook="products_search_results_heading_no_results_found"> 
     <%= Spree.t(:no_products_found) %> 
    </div> 
    <% elsif params.key?(:keywords) %> 
    <div data-hook="products_search_results_heading_results_found"> 
     <h6 class="search-results-title"><%= Spree.t(:search_results, keywords: h(params[:keywords])) %></h6> 
    </div> 
    <% end %> 
</div> 

<% if products.any? %> 
    <div id="products" class="row" data-hook> 
    <% products.each do |product| %> 
     <% url = spree.product_url(product, taxon_id: @taxon.try(:id)) %> 
     <div id="product_<%= product.id %>" class="col-md-3 col-sm-6 product-list-item" data-hook="products_list_item" itemscope itemtype="https://schema.org/Product"> 
     <div class="panel panel-default"> 
      <% cache(@taxon.present? ? [I18n.locale, current_currency, @taxon, product] : [I18n.locale, current_currency, product]) do %> 
      <div class="panel-body text-center product-body"> 
       <%= link_to small_image(product, itemprop: "image"), url, itemprop: 'url' %><br/> 
       <%= link_to truncate(product.name, length: 50), url, class: 'info', itemprop: "name", title: product.name %> 
      </div> 
      <div class="panel-footer text-center"> 
       <span itemprop="offers" itemscope itemtype="https://schema.org/Offer"> 
       <span class="price selling lead" itemprop="price"><%= display_price(product) %></span> 
       </span> 
      </div> 
      <% end %> 
     </div> 
     </div> 
    <% end %> 
    <% reset_cycle("classes") %> 
    </div> 
<% end %> 

<% if paginated_products.respond_to?(:num_pages) %> 
    <%= paginate paginated_products, theme: 'twitter-bootstrap-3' %> 
<% end %> 

индекс контроллера:

module Spree 
    class HomeController < Spree::StoreController 
    helper 'spree/products' 
    respond_to :html 

    def index 
     @searcher = build_searcher(params.merge(include_images: true)) 
     @products = @searcher.retrieve_products 
     @taxonomies = Spree::Taxonomy.includes(root: :children) 
    end 
    end 
end 
+0

может отображать метод контроллера связаны d на страницу индекса (где существуют продукты)? –

+0

Просто добавил. Внизу – Thrasher

ответ

2

Перейти к spree/frontend/app/controllers/spree/taxons_controller.rb

сделать метод show выглядеть следующим образом

def show 
     @taxon = Taxon.friendly.find(params[:id]) 
     return unless @taxon 

     @searcher = build_searcher(params.merge(include_images: true)) 
     @products = @searcher.retrieve_products 
     @taxonomies = Spree::Taxonomy.includes(root: :children) 
    end 
+0

неправильное количество аргументов (задано 2, ожидаемое 1) – Thrasher

+0

'@searcher = build_searcher (build_searcher (params.merge (include_images: true)))' – Thrasher

+0

Извините, я обновил ответ –

0

Прежде, файл должен называться _products.html.erb.

Но она по-прежнему говорит: «Нет товаров не найдено»

Во-вторых, не могли бы вы показать нам этот файл?

Но в моем указателе они показаны.

Не могли бы вы также показать нам, как вы предоставляете свои товары в своем индексе?

EDIT: Кажется, что в Taxons#show переменная экземпляра @products не установлена. Убедитесь, что вы установили его в действии show в своем TaxonsController.

+0

Я просто добавил информацию, которую вы задали. Благодаря! – Thrasher

+0

У вас есть файл '_products.html.erb' в'/app/views/spree/shared/'? Если да, можем ли мы это увидеть? – born4new

+0

Хорошо. Только что отредактирован. – Thrasher

-1

На самом деле я искал ответ на «Нет товаров найдено» Вот мой вопрос ссылка: Spree Commerce: Нет Найденные продукты Spree Commerce: No Products Found

Я только что присоединился к stackoverflow.com через пару минут, не могу добавить комментарий к предыдущему ответы.

Вот /controllers/spree/taxons_controller.rb:

module Spree 

класс TaxonsController < Spree :: StoreController rescue_from ActiveRecord :: RecordNotFound, с:: render_404 помощник 'Spree/продукты'

respond_to :html 

def show 
    @taxon = Taxon.friendly.find(params[:id]) 
    return unless @taxon 

    @searcher = build_searcher(params.merge(taxon: @taxon.id, include_images: true)) 

    sorting_scope = params[:order].try(:to_sym) || :ascend_by_updated_at 

    @taxonomies = Spree::Taxonomy.includes(root: :children) 

    @searcher.retrieve_products 

    @products = @searcher.retrieve_products 



    @curr_page = params[:page] || 1 
    @products_per_page = Spree::Config.products_per_page 

    @start_no = @curr_page == 1 ? 1 : ((@curr_page.to_i-1)*@products_per_page)+1 

    @end_no = @products.length 

    if @curr_page.to_i > 1 
    @end_no = ((@curr_page.to_i-1)*@products_per_page) + @end_no 
    end 

# @end_no = @product_count <= @product_count ? @product_count : @products.length+(@curr_page.to_i-1)*@products_per_page 

end 

private 

def accurate_title 
    @taxon.try(:seo_title) || super 
end 

конец конец

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