无法在Rails中加载特定于控制器的javascript文件(5+;)

无法在Rails中加载特定于控制器的javascript文件(5+;),javascript,ruby-on-rails,controller,assets,pipeline,Javascript,Ruby On Rails,Controller,Assets,Pipeline,我已经尝试了尽可能多的可能的解决方案,但到目前为止,没有任何效果。.js文件中的代码没有被执行,也没有出现在客户端浏览器中的任何位置 application.html.erb将此部分加载到头部: <%= csrf_meta_tags %> <%= stylesheet_link_tag "application", params[:controller], media: "all" %> <%= javascript_include_tag "application

我已经尝试了尽可能多的可能的解决方案,但到目前为止,没有任何效果。.js文件中的代码没有被执行,也没有出现在客户端浏览器中的任何位置

application.html.erb将此部分加载到头部:

<%= csrf_meta_tags %>
<%= stylesheet_link_tag "application", params[:controller], media: "all" %>
<%= javascript_include_tag "application", params[:controller] %>
[controller name here].js

$(document).ready(function() {
    alert('My controller');
});
在浏览器中,当上述所有内容保持不变时,将有一个名为“[controller name].self.longstringher.js?body=1”的资源。它将包含以下代码:

(function() {


}).call(this);
…这在我的项目中不存在。如果我从assets.rb中删除控制器,当尝试从该控制器加载页面时,它会抛出一个错误[如预期的那样]。删除应用程序布局中的条目时,浏览器的资源中缺少“[controller].self.js”文件[如预期的那样]。但是,无论是否有任何控制器的js文件丢失,都不会导致任何错误,也不会阻止浏览器的资产包含“[controller].self.js”。这就像app/assets/javascripts中的文件被完全忽略和“断掉”一样

注意:我在application.js/.css文件中没有“//=require_-tree.”和“*=require_-tree.”,因为我特别按照说明操作。这是故意的

我还删除了我能找到的关于TurboLink的所有参考资料(gem、资产等),因为我一直在阅读,这可能会导致与此问题相关的邪恶事件发生

我还重新启动了服务器,预编译了资产,并多次执行了此操作和其他一些仪式性操作,但都没有效果

为了记录在案,我还将assets.rb中的“#{controller}.js.coffee”更改为“.js”,但没有效果。但我读到这是没有必要的

所有控制器都存在此问题,而不仅仅是一个控制器

谢谢你的帮助


[EDIT]我使用scaffolding创建了一个新的rails项目,并遵循相同的过程(但确保预编译的资产(posts.js)在assets.rb中被专门按名称调用),并且具有与上述相同的问题,包括相同的javascript“存根”浏览器的posts.blahblah.js文件中的代码。

似乎您的文件名是
[controller name here].js
,您使用的是js而不是coffee

但您正在
config/initializers/assets.rb文件中添加coffee文件。这就是它无法正确编译文件的原因。
尝试更改
config/initializers/assets.rb
文件,如下所示:

%w(  articles password_resets sessions static_pages users ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end

其他一切似乎都很好。

它应该可以工作,但要确保控制器名称和js/css文件名应该相同,比如如果控制器名称是
rooms\u controller.rb
那么js应该是
rooms.coffee或room.js等等。
我试着直接编码控制器的资产名称。(始终记得重新启动服务等)。这是我的第一个想法,但没有帮助。我又试了一次。我还硬编码了控制器的.js文件名。无论如何,根据这一点,预编译只对css和coffeescript是必要的。这个对我很有好处。同样,浏览器中的.js资产显示为我在评论中提到的“存根”,而不是我的代码。我也尝试过rake-tmp:cache:clear。问题是咖啡脚本。我没有用它。我已经删除了对它的所有引用(除了gem)。Coffeescript在预编译时解析为controller-name.js。这会导致忽略同名文件。如果我更改了名称并相应地更新了所有内容,它就可以正常工作。但是,我无法摆脱咖啡脚本。一旦我删除了gem,一切都会失败(rails资产:precompile->'LoadError:无法加载这样的文件--coffee_script';转到任何页面->'cannot load这样的文件--coffee_script',等等。我已经清除了缓存,以及我能找到的任何东西。如果您有任何扩展名为.coffee的文件,就会导致此错误。
%w(  articles password_resets sessions static_pages users ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end