DRY MVC декларативный минимальный конвейер актива для конкретного контроллера - PullRequest
0 голосов
/ 17 февраля 2012

Существует несколько способов включить ресурсы, относящиеся к контроллеру, в Rails:

Один вариант, который не является СУХИМЫМ, - это добавить = yield :head в макет и content_for(:head) { ... } в каждое представление верхнего уровня. Если актив зависит от контроллера, его следует указывать только один раз для каждого контроллера, а не для каждого представления.Конечно, этот подход хорош для просмотра -специфичных активов.

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

Третий вариант - включает все активы типа в одном файле .Браузеры не должны загружать ненужные им ресурсы, и это затруднит отладку приложения.Этот вариант подойдет, если общий размер актива по-прежнему поддается управлению.

Есть ли способ декларативно включить один специфичный для контроллера актив в отдельный файл DRY без нарушения модели MVC с использованием очень небольшого кода?

1 Ответ

0 голосов
/ 18 февраля 2012

Rails будет передавать только код в файлах ресурсов конкретного контроллера указанному контроллеру, если вы используете следующие команды include в макете приложения:

<%= javascript_include_tag params[:controller] %>
<%= stylesheet_link_tag params[:controller] %>

Я подозреваю, что если вы сделаете это, вам нужно будет также сделать следующее:

  • Все еще включают <%= javascript_include_tag :application %> и <%= stylesheet_link_tag :application %>, чтобы получить все ваши активы кросс-контроллера
  • Проверьте, как работают директивы require_tree ., чтобы убедиться, что конкретные ресурсы контроллера не загружаются как application.css, так и <%= stylesheet_link_tag params[:controller] %>. На самом деле вам может потребоваться удалить require_tree . и загрузить все листы кросс-контроллера прямо в application файлы

Для получения дополнительной информации см. Руководство по рельсам на конвейере активов в разделе 2.

...