Ви не повинні завантажувати файли JS або CSS за межами конвеєра активів, оскільки ви втрачаєте важливі функції, які роблять Rails так великими. І вам не потрібен інший дорогоцінний камінь. Я вважаю, що можна використовувати якомога менше дорогоцінних каменів, і використовувати дорогоцінний камінь тут не потрібно.
Те, що ви хочете, відоме як "Javascript JavaScript" ("Внизу визначений конкретний Javascript). Це дозволяє завантажувати конкретний файл JavaScript для конкретного КОНТРОЛЕРУ. Спроба підключити Javascript до представлення виглядає .. назад і не відповідає схемі дизайну MVC. Ви хочете пов’язати його з контролерами або діями всередині ваших контролерів.
На жаль, з будь-якої причини Rails devs вирішив, що за замовчуванням на кожну сторінку завантажуватимуться всі файли JS, що знаходяться у вашому каталозі активів. Чому вони вирішили це зробити замість того, щоб увімкнути "Javascript JavaScript" за замовчуванням, я ніколи не дізнаюся. Це робиться через файл application.js, який включає типовий рядок коду за замовчуванням:
//= require_tree .
Це відомо як директива . Це те, що зірочки використовують для завантаження кожного JS-файлу в каталог активів / javascripts. За замовчуванням зірочки автоматично завантажують application.js та application.css, а директива Requ_tree завантажує всі файли JS та Coffee у відповідних каталогах.
ПРИМІТКА. Коли ви складаєте ліси (якщо ви не є будівельними лісами, зараз прийшов час для початку), Rails автоматично генерує файл для кави для вас для контролера цього лісу. Якщо ви хочете, щоб він генерував стандартний файл JS замість файлу кави , тоді видаліть кавовий камінь, який увімкнено за умовчанням у вашому Gemfile , і ваш ешафот створить натомість файли JS.
Гаразд, тому перший крок до включення "Javascript JavaScript" - це видалити код Requ_tree з файлу application.js, АБО змінити його в папку в каталозі активів / javascripts, якщо вам все ще потрібні глобальні файли JS. IE:
//= require_tree ./global
Крок 2: Перейдіть у свій файл config / inicijalizer / elements.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]:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
Перезавантажте сервер та альта! Файл JS, сформований із вашим ешафтом, тепер завантажується лише тоді, коли викликається цей контролер.
Потрібно завантажити певний файл JS для певної ДІЇ у контролер , IE / статті / new ? Зробіть це замість цього:
application.html.erb :
<%= javascript_include_tag "#{controller_name}/#{action_name}" if AppName::Application.assets.find_asset("#{controller_name}/#{action_name}") %>
config / ініціалізатори / asset.rb :
config.assets.precompile += %w(*/*)
Потім додайте нову папку з тим самим іменем, що і контролер, у папку активів / javascripts і помістіть файл js з тим самим іменем, що і ваша дія. Потім він завантажить його на ту конкретну дію.