Sie sollten Ihre JS- oder CSS-Dateien nicht außerhalb der Asset-Pipeline laden, da Sie wichtige Funktionen verlieren, die Rails so großartig machen. Und du brauchst kein weiteres Juwel. Ich glaube daran, so wenig Edelsteine wie möglich zu verwenden, und die Verwendung eines Edelsteins ist hier nicht erforderlich.
Was Sie möchten, wird als "Controller-spezifisches Javascript" bezeichnet ("Aktionsspezifisches Javascript ist unten enthalten). Auf diese Weise können Sie eine bestimmte JavaScript-Datei für einen bestimmten CONTROLLER laden. Der Versuch, Ihr Javascript mit einer Ansicht zu verbinden, ist eine Art von .. Sie möchten es Ihren Controllern oder Aktionen in Ihren Controllern zuordnen.
Leider haben Rails-Entwickler aus irgendeinem Grund entschieden, dass standardmäßig jede Seite jede JS-Datei in Ihrem Assets-Verzeichnis lädt. Warum sie sich dazu entschlossen haben, anstatt standardmäßig "Controller Specific Javascript" zu aktivieren, werde ich nie erfahren. Dies erfolgt über die Datei application.js, die standardmäßig die folgende Codezeile enthält:
//= require_tree .
Dies ist als Richtlinie bekannt . Es ist das, was sprockets verwendet, um jede JS-Datei in das Verzeichnis assets / javascripts zu laden. Standardmäßig lädt sprockets application.js und application.css automatisch, und die Direktive require_tree lädt jede JS- und Coffee-Datei in ihre jeweiligen Verzeichnisse.
HINWEIS: Wenn Sie ein Gerüst bauen (wenn Sie kein Gerüst haben, ist jetzt ein guter Zeitpunkt, um zu beginnen), generiert Rails automatisch eine Kaffeedatei für Sie, für den Controller dieses Gerüsts. Wenn Sie es wollen , einen generieren Standard JS statt einer Datei Kaffee - Datei, entfernen Sie den Kaffee Juwel , die standardmäßig in Ihrem aktiviert ist Gemfile , und Ihr Gerüst wird JS Dateien erstellen statt.
Ok, der erste Schritt zum Aktivieren von "Controller Specific Javascript" besteht darin, den Code "require_tree" aus Ihrer Datei application.js zu entfernen oder ihn in einen Ordner in Ihrem Verzeichnis "resources / javascripts" zu ändern, wenn Sie weiterhin globale JS-Dateien benötigen. IE:
//= require_tree ./global
Schritt 2: Gehen Sie in Ihre Datei config / initializers / assets.rb und fügen Sie Folgendes hinzu:
%w( controllerone controllertwo controllerthree ).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
Geben Sie die gewünschten Controllernamen ein.
Schritt 3: Ersetzen Sie den javascript_include_tag in Ihrer application.html.erb-Datei durch diesen (beachten Sie den Teil params [: controller]:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
Starten Sie Ihren Server und Ihre Bratsche neu! Die JS-Datei, die mit Ihrem Gerüst erstellt wurde, wird jetzt nur geladen, wenn dieser Controller aufgerufen wird.
Müssen Sie eine bestimmte JS-Datei auf eine bestimmte AKTION in Ihrem Controller , IE / articles / new , laden ? Tun Sie dies stattdessen:
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(*/*)
Fügen Sie dann einen neuen Ordner mit demselben Namen wie Ihr Controller in Ihren Ordner "Assets / Javascripts" ein und legen Sie Ihre JS-Datei mit demselben Namen wie Ihre Aktion darin ab. Es wird dann auf diese bestimmte Aktion geladen.