Você não deve carregar seus arquivos JS ou CSS fora do pipeline de ativos, pois perde recursos importantes que tornam o Rails tão bom. E você não precisa de outra jóia. Eu acredito em usar o mínimo possível de gemas, e usar uma gema não é necessário aqui.
O que você deseja é conhecido como "Javascript Específico do Controlador" ("Javascript Específico da Ação está incluído na parte inferior). Isso permite que você carregue um arquivo JavaScript específico para um CONTROLADOR específico. Tentar conectar seu Javascript a uma Visualização é uma espécie de .." Você deseja associá-lo aos seus Controladores ou ações dentro dos seus Controladores.
Infelizmente, por qualquer motivo, os desenvolvedores do Rails decidiram que, por padrão, todas as páginas carregam todos os arquivos JS localizados no diretório de ativos. Por que eles decidiram fazer isso em vez de ativar o "Javascript específico do controlador" por padrão, nunca saberei. Isso é feito através do arquivo application.js, que inclui a seguinte linha de código por padrão:
//= require_tree .
Isso é conhecido como diretiva . É o que os sprockets usam para carregar todos os arquivos JS no diretório assets / javascripts. Por padrão, os sprockets carregam automaticamente application.js e application.css, e a diretiva require_tree carrega todos os arquivos JS e Coffee em seus respectivos diretórios.
NOTA: Quando você andaimes (se não estiver andando agora, é um bom momento para começar), o Rails gera automaticamente um arquivo de café para você, para o controlador desse andaime. Se você deseja gerar um arquivo JS padrão em vez de um arquivo de café , remova a gema de café que está ativada por padrão no seu Gemfile e seu andaime criará arquivos JS.
Ok, o primeiro passo para ativar o "Javascript específico do controlador" é remover o código require_tree do seu arquivo application.js OU alterá-lo para uma pasta no diretório assets / javascripts, se você ainda precisar de arquivos JS globais. IE:
//= require_tree ./global
Etapa 2: vá para o arquivo config / initializers / assets.rb e adicione o seguinte:
%w( controllerone controllertwo controllerthree ).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
Insira os nomes do controlador que você deseja.
Etapa 3: Substitua o javascript_include_tag no arquivo application.html.erb por este (observe a parte params [: controller]:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
Reinicie seu servidor e viola! O arquivo JS que foi gerado com o seu andaime agora será carregado somente quando esse controlador for chamado.
Precisa carregar um arquivo JS específico em uma ACTION específica no seu controlador , IE / articles / new ? Faça isso:
application.html.erb :
<%= javascript_include_tag "#{controller_name}/#{action_name}" if AppName::Application.assets.find_asset("#{controller_name}/#{action_name}") %>
config / inicializadores / assets.rb :
config.assets.precompile += %w(*/*)
Em seguida, inclua uma nova pasta com o mesmo nome que você controla na pasta assets / javascripts e coloque seu arquivo js com o mesmo nome da sua ação. Em seguida, ele será carregado nessa ação específica.