2013-10-01 2 views
0

У меня есть модель Category, которая has_many :items. Элементы имеют удаленное логическое поле, которое проверяет, был ли элемент удален или нет. При перечислении всех категорий, я также хочу, чтобы напечатать подсчет deleted: false элементов в этой категориирельсы 4 и мангоиды уменьшают количество запросов

Это, как я это делаю

@categories = Category.includes(:items).all 

При печати из графов не удаленных элементов, а я м делает

category.items.get_all.count 

get_all является сфера внутри модели элемента

scope :get_all, where(deleted: false) 

Это делается, но я чувствую, что время загрузки страницы медленнее, чем другие страницы моего сайта. Есть ли способ оптимизировать этот код?

ответ

0

Вы получаете N+1 запросов из-за области get_all, которая выполняет запрос для items каждого category.

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

N+1 проблема запроса может быть решена путем получения счета в Ruby себя так:

category.items.select{|i| !i.deleted}.count 
Смежные вопросы