我尝试了尽可能多的潜在解决方案,因为我可以找到并且迄今为止没有任何工作。 .js文件中的代码没有被执行,也没有出现在客户端浏览器中的任何地方。无法在Rails中加载控制器特定的JavaScript文件(5+)
application.html.erb负载该部分在头:
<%= csrf_meta_tags %>
<%= stylesheet_link_tag "application", params[:controller], media: "all" %>
<%= javascript_include_tag "application", params[:controller] %>
配置/初始化/ assets.rb
%w( articles password_resets sessions static_pages users).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js.coffee", "#{controller}.css"]
end
[控制器名称这里] .js文件
$(document).ready(function() {
alert('My controller');
});
在浏览器中,当上面的所有内容保持原样时,将会有一个名为'[controller-name] .self.longstringhere.j的资产S'体= 1’ 。它会有这个代码:
(function() {
}).call(this);
......这在我的项目中没有任何地方存在。如果我从assets.rb中删除控制器,当试图从该控制器加载页面时,它会引发错误[如预期的那样]。当摆脱应用程序布局中的条目时,浏览器的资产中缺少'[controller] .self.js'文件[如预期的那样]。但是,无论控制器的任何js文件是否丢失都不会导致错误,并且不会妨碍浏览器的资产包含'[controller] .self.js'。这就像app/assets/javascripts中的文件完全被忽略并被“剔除”。
注意:我特别没有'// = require_tree'。和'* = require_tree'。在application.js/.css文件中,因为我特别按照说明here。这是故意的。
我也删除了我可以找到的所有引用(宝石的,资产等)turbolinks,因为我一直在阅读,这可能会导致可能与此问题有关的恶事发生。
我也重新启动了服务器,预编译了资源,并且多次完成了这个和其他几个仪式化的事情 - 都无济于事。
为了记录,我还将assets.rb中的“#{controller} .js.coffee”更改为'.js',但无济于事。但我读到,这是没有必要的。
这个问题是所有控制器的 - 不只是一个特别的。
感谢您的帮助!
[编辑]我创建了一个新的Rails项目用脚手架和遵循同样的程序(但要确保预编译的资产(posts.js)是专门由assets.rb名字叫出来),并有同样的问题如上所述,在浏览器的posts.blahblah.js文件中包含相同的JavaScript“存根”代码。
它应该工作,但要确保控制器名称和js/css文件名应该相同,如果您的控制器名称是'rooms_controller.rb',那么js应该是'rooms.coffee或room.js等...' – ashvin
我试着直接对控制器的资产名称进行硬编码以获得更好的效果。 (始终记住重新启动服务等)。 – vicmorrowshead