С Rails, где я должен поместить фрагменты HTML? Я не хочу частичные, но я хочу, чтобы они перезагружались во время разработки - PullRequest
6 голосов
/ 02 октября 2008

Будучи ленивым (и любящим СУХОЙ код), я из тех парней, которые собираются написать несколько маленьких оберток для повторяющейся разметки HTML. Предоставленные Rails уже хороши, но иногда у меня есть кое-что более конкретное, что, я знаю, я буду повторять снова и снова.

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

Прямо сейчас я создаю файл helpers / html_helper.rb и вставляю их туда. Проблема в том, что помощники не перезагружаются динамически для каждого запроса во время разработки. Поэтому каждый раз, когда я настраиваю свой фрагмент или код вокруг него, мне приходится убивать сервер и перезапускать его.

Конечно, это всего лишь 5-секундный процесс, но мне нравится удобство Rails - просто разрабатывать, а затем обновлять браузер. Так что я хотел бы иметь это для моих фрагментов разметки.

Примечание: просто вставить «unloadable» в модуль помощника не получится.

Ответы [ 4 ]

1 голос
/ 02 октября 2008

Это должно перезагрузить ВСЕ хелперы при каждом запросе (при условии, что вы придерживались соглашений об именах по умолчанию)

#Put this in config/environments/development.rb
ActiveSupport::Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize})

Или, если вы используете более старую версию Rails (2.0.2 или более раннюю, я думаю)

#Put this in config/environments/development.rb
Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize})

У меня работает в RoR 2.1.1


Обновление: изменен верхний фрагмент кода для включения 'ActiveSupport ::', должно быть неправильно скопировано / вставлено из моего кода.

1 голос
/ 02 октября 2008

Хороший вопрос! Это техника, которой я должен злоупотреблять чаще.

    #I go in environment.db (presumably it will work in one of the per-environment files, too.)
    Dependencies.explicitly_unloadable_constants << 'NameOfHelperToReloadHere'

Этот массив изначально пустой, по крайней мере, в моей установке. (Проверено через консоль.)

Я проверил это локально, и оно работает для меня, по крайней мере, на Rails 2.0.2. Основной кредит на решение принадлежит этот джентльмен .

1 голос
/ 02 октября 2008

Если вы добавите их в application_helper.rb, они будут загружаться каждый раз и будут доступны для всех ваших просмотров. Он загружается каждый раз в режиме разработки (или, по крайней мере, я не сталкивался с какими-либо проблемами).

Обычно я создаю маленьких помощников, которые я использую по всему сайту (например, сортируемые заголовки таблиц), которые используют ту же логику.

0 голосов
/ 02 октября 2008

Это ненастоящее решение, но вы можете использовать тесты (TestUnit, RSpec или любой другой), чтобы убедиться, что ваши помощники работают должным образом. Таким образом, вы бы не полагались на автоматическую перезагрузку своих помощников.

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