Ruby on Rails - лучший метод / метод для загрузки содержимого / блоков боковых столбцов - PullRequest
0 голосов
/ 31 марта 2011

Я разрабатываю веб-сайт сообщества / новостной статьи, где есть боковая колонка с различными "блоками" почти на всех страницах.В этих блоках: «Недавние статьи (показаны пять самых последних статей)», «Последние блоги», «Последние комментарии», вы получаете дрейф.

Когда я только начинал создавать приложение, я не был настоящимуверен, куда поместить код контроллера (скажем, для вызова @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, а затем отобразить и передать результаты в файл представления в моей общей папке.

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

1 Ответ

1 голос
/ 31 марта 2011

Всякий раз, когда есть много моделей, которые могут вызывать определенный метод, я, вероятно, использовал бы модуль Я думаю, это то, о чем вы говорите в своей первой идее, поскольку / lib - это место, где размещаются модули.

Вы также можете использовать помощников, но это хорошая идея - не допускать логики в помощников, только в моделях, если это возможно. Помощники должны быть просто использованы как способ представления данных, они являются частью представлений. Если логика добавлена, значит что-то не так:)

Убедитесь, что у вас также нет логики в ваших контроллерах. Я бы делал то же самое в начале, но это действительно плохая идея. Вместо этого поместите все в свои модели или, может быть, модуль, если они используются многими другими моделями.

Надеюсь, это вам немного поможет:)

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