2017-02-20 75 views
0

Я хочу показать выпадающее меню с древовидной структурой. Используя this SO-решение, данное @manoj, код для category_options_array прекрасно отображает дерево в элементе управления select для модели с меньше, но другая модель, которая имеет около 30 идентификаторов родителей, а некоторые из них с глубиной 1 уровень, сервер выходит из строя. На самом деле, даже если он использует 20 родительских_последовательностей, он выполняет 20 SQL-запросов, которые слишком просто для одного выпадающего элемента управления.Rails Оптимизация древовидного кода с помощью eager-loading

Я пытался собирать его в кэш - как этот

@categories = Category.where('parent_id = ? AND id != ?', parent_id, current_id).order(:name) 
@categories.each do |c| ..... 

однако, работает же 20 запросов SQL и 20 кэш.

Когда я читаю активную загрузку, это обычно условие соединения, и я не мог найти ни одного примера для одной модели. Могу ли я оптимизировать его с помощью загрузки или любого другого способа, чтобы запрос выполнялся один раз и организовывал массив для отображения ? TIA.

ответ

0

Это трудно дать точный ответ в коде, не видя, как структура данных вашей модели установлена, но, вообще говоря, вы можете использовать «включает в себя» заявление нетерпеливой нагрузки, которая также поддерживает вложенность:

http://apidock.com/rails/ActiveRecord/QueryMethods/includes

Как выглядят запросы при включении подмодели?

+0

Он запускает как можно больше запросов, так как есть записи о категориях и даже после их сбора в хеш-файлах он запускает все эти ... странные !! Модель категории: имя: строка, parent_id: integer (значение по умолчанию = 0) – Means

+0

вы можете опубликовать суть с определениями модели? – MBHNYC