Получение Activerecord счета группы (Rails 4.2) - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь обработать набор данных, организованных по категориям; Приведенный ниже запрос ActiveRecord - это то, что я использовал для разметки таблицы (заголовки категорий, затем информация о продукте (по соображениям производительности это было сделано в представлении, с использованием как можно большего количества логики для модели).

Я пытался сообщить о двух вещах:

  1. Просмотрите упорядоченный список наиболее часто используемых категорий по количеству продуктов; и
  2. Сообщить о количестве товаров в этих категориях.

Я пытался реализовать то, что нашел здесь , но мне было трудно получить count_id принятым.

Вот с чем я работаю:

<% @categories.each do |category| %> 
  <p><%= category.name %>;</p>
  <% category.products.includes(:rfid_tags).joins(:rfid_tags).order(name: :asc).limit(10).each do |product| %>
    <p><%= product.name %></p>
  <% end %>
<% end %>

Модель категории (экспортировал этот бит логического IRL, чтобы он был коротким):

def warehouse_product_grouping
  self.products.includes(:rfid_tags).joins(:rfid_tags)
end  


Models:

#Warehouse.rb

has_many :tags, as: :location
has_many :products, through: :tags

#rfid_tag.rb

belongs_to product #

  #polymorphic
  belongs_to :trackable, polymorphic: true
  belongs_to :location, polymorphic: true

#Product.rb

  has_one :primary_category_assignment

  has_many :rfid_tags, as: :trackable

Каждый товар относится к категории - ассоциации - это склады> метки> товары> назначение_категории> категория.

#CategoryAssignment.rb #this is a join table
  belongs_to :product, required: true
  belongs_to :category, required: true

#Category.rb
  has_many :products, through: :category_assignment

1 Ответ

0 голосов
/ 08 ноября 2018

«Сообщить о количестве товаров» можно сделать просто с помощью category.products.count. Чтобы избежать проблемы запроса N + 1, я предлагаю включать продукты при работе с категориями: <% @categories.includes(:products).each do |category| %>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...