2014-08-31 6 views
2

Я довольно новый с Ruby on Rails, и я ищу правильный способ включить библиотеки CSS/JS для специального контроллера и метод, чтобы избежать бесполезных запросов.Ruby On Rails - Лучший способ включить CSS и JS

Сейчас я использую этот «уродливый» путь:

- # In a layout 
- # IndustryManager::index -> We want load jquery toggles 
- if action_name == "index" and controller_name == "industry_manager" 
    = javascript_include_tag "jquery-toggles/js/Toggles" 
    = javascript_include_tag "jquery-toggles/js/wrap" 
    = stylesheet_link_tag "jquery-toggles/css/toggles-full" 
+1

Один из распространенных способов решения * слишком большого количества запросов * заключается в том, чтобы поместить все источники в один большой файл и минимизировать это, как часть вашего процесса сборки. Но это может быть не так, как вы хотите. – Yogu

ответ

1

Несколько вариантов, которые немного чище, чем то, что вы делаете:

1) Есть один макет для каждой комбинации CSS/js, который вам понадобится, и укажите соответствующий макет в действии. Это действительно имеет смысл, если у вас есть группы действий, которые будут использовать один и тот же css/js, иначе у вас будет один макет для каждого действия, что является беспорядком.

2) Это почти то же самое, что и вы, но немного более многоразовое - установите переменную в своем действии, такую ​​как @include_toggles = true, а затем включите «jquery-toggles», только если эта переменная истинна. Затем вы можете повторно использовать эту переменную в других действиях, для которых нужны jquery-toggles, без необходимости проверять конкретные имена действий и контроллеров.

3) Если каждое действие имеет свой собственный css/js, не используемый другими действиями, вы можете упорядочить свои файлы внутри каталога с именем действия. Затем вы можете включить все файлы в этот каталог, как описано здесь https://stackoverflow.com/a/8902949/1786750, интерполируя имя текущего действия в пути, чтобы вы получили только файлы, необходимые для текущего действия. Таким образом, для индекса:

<%= javascript_include_tag Dir[Rails.root.join("public/javascripts/views/#{action_name}/*.js")].map { |s| s.sub(Rails.root.join("public/javascripts/").to_s, "") } %> 

(Этот код прокатывается из приведенного выше ответа, я просто добавил #{action_name} для иллюстрации концепции.)

Надежда, что помогает. Могут быть даже лучшие варианты, но выше, по крайней мере, простые и относительно чистые.

+0

Я надеялся на волшебный ответ, но ваш ответ №2 и №3 выполнял эту работу. –

Смежные вопросы