Вы не должны загружать свои файлы JS или CSS вне конвейера ресурсов, потому что вы теряете важные функции, которые делают Rails таким замечательным.И тебе не нужен еще один драгоценный камень.Я верю в использование как можно меньшего количества драгоценных камней, и использование драгоценного камня здесь не является необходимым.
То, что вы хотите, известно как «Javascript для конкретного контроллера» («Javascript для конкретного действия включен внизу).позволяет вам загружать определенный файл JavaScript для определенного КОНТРОЛЛЕРА. Попытка подключить ваш Javascript к представлению является своего рода ... задом наперед и не следует шаблону проектирования MVC. Вы хотите связать его с вашими контроллерами или действиями внутри вашегоКонтроллеры.
К сожалению, по какой-то причине разработчики Rails решили, что по умолчанию каждая страница будет загружать каждый файл JS, находящийся в каталоге ваших ресурсов. Почему они решили сделать это вместо того, чтобы включить «Javascript для конкретного контроллера» по умолчаниюЯ никогда не узнаю. Это делается через файл application.js, который по умолчанию содержит следующую строку кода:
//= require_tree .
Это называется директивой .используется для загрузки каждого файла JS в каталоге assets / javascripts.t, sprockets автоматически загружает application.js и application.css, а директива require_tree загружает каждый файл JS и Coffee в соответствующие каталоги.
ПРИМЕЧАНИЕ: Когда вы строите леса (если вы не 't scaffolding, сейчас хорошее время для начала), Rails автоматически генерирует файл coffee для вас, для контроллера этого скаффолда.Если вы хотите, чтобы он генерировал стандартный файл JS вместо coffee , то удалите coffee gem , который по умолчанию включен в вашем Gemfile, и ваш скаффолд вместо этого создаст JS-файлы.
Хорошо, поэтому первый шаг к включению «Контроллер-специфичного Javascript» - это удаление кода require_tree из вашего файла application.js., ИЛИ измените его в папку в вашем каталоге assets / javascripts, если вам все еще нужны глобальные файлы JS.IE:
//= require_tree ./global
Шаг 2: Перейдите в файл config / initializers / assets.rb и добавьте следующее:
%w( controllerone controllertwo controllerthree ).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
Вставьте имена контроллеровчто вы хотите.
Шаг 3: Замените javascript_include_tag в файле application.html.erb этим (обратите внимание на params [: controller] part:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
Перезагрузите сервер и альт! Файл JS, созданный на вашем скаффолде, теперь будет загружаться только при вызове этого контроллера.
Необходимо загрузить определенный файл JS для определенного действия в вашем контроллере , IE / article / new ? Сделайте это вместо:
application.html.erb :
<%= javascript_include_tag "#{controller_name}/#{action_name}" if AppName::Application.assets.find_asset("#{controller_name}/#{action_name}") %>
config/initializers/assets.rb:
config.assets.precompile += %w(*/*)
Затем добавьте новую папку с тем же именем, что и у вашего контроллера, в папку assets / javascripts и поместите файл js с тем же именем, что и ваше действие, внутри.Затем он загрузит его на это конкретное действие.