Проблема: У меня есть категории и продукты в категориях. Код / запросы очень медленные.
У каждой категории есть подкатегории, как у одной модели. У подкатегорий также есть продукты и, возможно, подкатегории.
Поэтому мне нужно получить все товары всех подкатегорий при вызове родительской категории.
категория модели
class Category < ApplicationRecord
belongs_to :parent, polymorphic: true
has_many :categories, as: :parent, :dependent => :destroy
has_many :products, :dependent => :destroy
def all_products
@all_products = []
all_products_find(self)
return @all_products
end
def all_products_find(category)
@all_products += category.products
for cat in category.categories
all_products_find(cat)
end
end
...
end
Я использую Kaminari для разбиения массива на страницы, но перед его использованием категория помещает все продукты в массив, поэтому он очень длинный. Как я могу paginate_array, не собирая все продукты раньше?
действие моего контроллера
@category = Category.find(params[:id])
if !(@category.nil?)
@products = @category.all_products #still gathering all products -> slow
@products_part = Kaminari.paginate_array(@products).page(params[:page]).per(12)
end
Как я могу его оптимизировать?