Vous ne devriez pas charger vos fichiers JS ou CSS en dehors du pipeline d'actifs, car vous perdez des fonctionnalités importantes qui rendent Rails si génial. Et vous n'avez pas besoin d'un autre bijou. Je crois qu'il faut utiliser le moins de gemmes possible, et utiliser une gemme n'est pas nécessaire ici.
Ce que vous voulez est connu sous le nom de "Javascript spécifique au contrôleur" ("Javascript spécifique à l'action est inclus en bas). Cela vous permet de charger un fichier JavaScript spécifique pour un contrôleur spécifique. Essayer de connecter votre Javascript à une vue est en quelque sorte .. . à l'envers et ne suit pas le modèle de conception MVC. Vous souhaitez l'associer à vos contrôleurs ou à des actions dans vos contrôleurs.
Malheureusement, pour une raison quelconque, les développeurs de Rails ont décidé que par défaut, chaque page chargerait chaque fichier JS situé dans votre répertoire de ressources. Pourquoi ils ont décidé de faire cela au lieu d'activer "Controller Specific Javascript" par défaut, je ne le saurai jamais. Cela se fait via le fichier application.js, qui comprend la ligne de code suivante par défaut:
//= require_tree .
C'est ce qu'on appelle une directive . C'est ce que sprockets utilise pour charger chaque fichier JS dans le répertoire assets / javascripts. Par défaut, sprockets charge automatiquement application.js et application.css, et la directive require_tree charge chaque fichier JS et Coffee dans leurs répertoires respectifs.
REMARQUE: lorsque vous échafaudez (si vous n'êtes pas un échafaudage, c'est le bon moment pour commencer), Rails génère automatiquement un fichier café pour vous, pour le contrôleur de cet échafaudage. Si vous souhaitez qu'il génère un fichier JS standard au lieu d'un fichier café , supprimez la gemme de café activée par défaut dans votre Gemfile , et votre échafaudage créera des fichiers JS à la place.
Ok, donc la première étape pour activer "Controller Specific Javascript" est de supprimer le code require_tree de votre fichier application.js, OU de le changer dans un dossier dans votre répertoire assets / javascripts si vous avez encore besoin de fichiers JS globaux. C'EST À DIRE:
//= require_tree ./global
Étape 2: Accédez à votre fichier config / initializers / assets.rb et ajoutez ce qui suit:
%w( controllerone controllertwo controllerthree ).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
Insérez les noms de contrôleurs souhaités.
Étape 3: Remplacez le javascript_include_tag dans votre fichier application.html.erb par ceci (notez la partie params [: controller]:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
Redémarrez votre serveur et alto! Le fichier JS qui a été généré avec votre échafaudage ne se chargera désormais que lorsque ce contrôleur sera appelé.
Besoin de charger un fichier JS spécifique sur une ACTION spécifique dans votre contrôleur , IE / articles / new ? Faites ceci à la place:
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(*/*)
Ensuite, ajoutez un nouveau dossier avec le même nom que votre contrôleur dans votre dossier assets / javascripts et placez votre fichier js avec le même nom que votre action à l'intérieur. Il le chargera ensuite sur cette action spécifique.