Я думаю, документы http://guides.rubyonrails.org/asset_pipeline.html нуждаются в уточнении. Они заявляют:
Например, если сгенерирован ProjectsController, будет новый
файл в app / assets / javascripts / projects.js.coffee и другой в
Приложение / активы / таблицы стилей / projects.css.scss. Вы должны поставить любой
JavaScript или CSS уникальны для контроллера внутри соответствующего ресурса
файлы, так как эти файлы могут быть загружены только для этих контроллеров
с такими строками, как <% = javascript_include_tag params [: controller]%>
или <% = stylesheet_link_tag params [: controller]%>.
Насколько я понимаю, в производственном режиме все JS предпочтительно упаковываются в один оптимизированный файл. Я предполагаю, что кэширование этого оптимизированного файла предпочтительнее, чем страницы, специально загружающие различные наборы самих файлов JS.
Возможно, смысл javascript_include_tag в том, чтобы запустить какой-то конкретный javascript для этой страницы. Однако по умолчанию для application.js используется дерево, которое включает в себя созданные файлы. Так что я предполагаю, что это должно быть скорректировано, чтобы НЕ включать какой-либо специфичный для контроллера javascript.
Этот ответ здесь Используя Rails 3.1, куда вы помещаете свой "специфичный для страницы" код javascript? , кажется, предлагает разумный способ решения этой проблемы - связать функции JS с divs, и когда JQuery делает не видеть div на странице, ничего не выполняется.
Так, какова лучшая практика? Правильно ли мое понимание специфики контроллера? Разве по умолчанию включение дерева в application.js противоречит целям контроллера js?