Я разрабатываю веб-сайт сообщества / новостной статьи, где есть боковая колонка с различными "блоками" почти на всех страницах.В этих блоках: «Недавние статьи (показаны пять самых последних статей)», «Последние блоги», «Последние комментарии», вы получаете дрейф.
Когда я только начинал создавать приложение, я не был настоящимуверен, куда поместить код контроллера (скажем, для вызова @recent_articles = Article.where ... и т. д.).Я не думал, что он может войти в контроллер Articles, потому что не всегда вызывается контроллер Articles.Поэтому я подумал, что лучше всего будет работать в контроллере приложений, так как большая часть контента на сайте будет вызывать это.Я поместил «@recent_content» в контроллер приложения и сделал: before_filter, чтобы загрузить его.
В этом вы можете увидеть недостаток.По мере улучшения работы с Rails я вернулся к рефакторингу, так как сайт загружался ужасно и достаточно точно, вся моя логика в контроллере приложений, определенная before_filter, загружалась на каждое действие , независимо от того,это было нужно или нет.(Сайт резко ускорился, когда я убрал дом на контроллере приложений).
Моя ошибка осознается, но мне все еще нужно определить переменные экземпляра для @recent_articles, @recent_blogs и т. Д. где-то, , поэтому они загружаются только при необходимости.Конечно, я буду в конечном итоге кэшировать контент сайта, когда он будет запущен в производство, но я хочу быть хорошим программистом Rails здесь.
Так вот мой вопрос ... как именно вы справитесь с этой ситуацией и гдевы бы поставили логику?Я могу думать о двух способах, не уверенный, какой из них лучше ...
Первый способ ... Я взглянул на проект от другого разработчика Rails и заметил, что он делает странные вещи, подобные этому,создание файлов в папке / lib.Например, определение метода для метатегов страницы или состояний активного меню.Честно говоря, я раньше не ошибался с папкой / lib, полагая, что большинство моих вещей должно оставаться в папке / app.
Второй способ ... мне кажется, что помощники могут показаться подходящим вариантом.Может быть, я мог бы определить помощника «Recent_articles», вызвать там мою переменную экземпляра @recent_articles, а затем отобразить и передать результаты в файл представления в моей общей папке.
В целом, какой из этих способов лучшепуть с точки зрения производительности или передового опыта?Или есть лучший способ сделать это, о котором я не знаю?