Отображение количества циклов из pg_search в шаблоне Rails 5.1

У меня есть страница продуктов с возможностью фильтрации, которая имеет_много вариантов с использованием гем pg_search, и она работает хорошо. Я пытаюсь показать общее количество результатов поиска как часть отображения результатов. То, что я сделал, как вы можете видеть ниже, частично работает — оно показывает количество вариантов, но не показывает общее количество; это показывает счет для каждого продукта.

products_controller.rb

  def index
    @products =
        if params[:query]
          @albums = Album.where(name: params[:query])
          Product.search_for(params[:query])
        else
          # @albums - products is the default image gallery for all products index page
          @albums = Album.where(name: 'products')
          Product.order(:name)
        end
  end

продукты/index.html.erb

...
<% @products.each do |p| %>
    <%= p.variations.count %> - variations
<% end %>
...

Скриншот того, что он отображает

Для результата, показанного ниже, он перебирает 2 продукта, каждый из которых имеет 1 вариант, поэтому он перечисляет их как отдельные, а не суммирует как общее количество. Он должен отображать 2 - variations. Я понимаю, почему это делается именно так; Мне просто непонятно, как собирать результаты, складывать их и отображать количество.

введите здесь описание изображения


person Charles Smith    schedule 05.03.2018    source источник


Ответы (3)


Было бы хорошо установить общее количество от самого действия контроллера. Циклический просмотр каждого продукта для получения общего количества вариаций не очень хорош, если мы можем получить его с помощью самого запроса к БД.

def index
  ...
  @total_variations = Variation.joins(:product).where(product: @products).count
end

Переменная count может использоваться в представлении.

<%= @total_variations %> - variations
person Ashik Salman    schedule 06.03.2018

Можете ли вы вести текущий счет вне вашего цикла, например:

...
<% total_variations = 0 %>
<% @products.each do |p| %>
    <% total_variations += p.variations.count %>
    <%= total_variations %> - variations
<% end %>
person Taryn East    schedule 06.03.2018

Вы можете сделать это, просто используя with_index, следуя приведенному ниже коду.

...
<% @products.each.with_index(1) do |p, index| %>
   <%= index %> - variations
<% end %>
...

или если вы хотите начать с нуля, следуйте приведенному ниже коду

...
<% @products.each_with_index do |p, index| %>
   <%= index %> - variations
<% end %>
...

Надеюсь, поможет

person fool-dev    schedule 06.03.2018