我嘗試了儘可能多的潛在解決方案,因爲我可以找到並且迄今爲止沒有任何工作。 .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