在我的布局页脚中,我包含特定于页面的JavaScript文件,如下所示:
<%= javascript_include_tag "#{params[:controller]}_#{params[:action]}" if javascript_exists?("#{params[:controller]}_#{params[:action]}") %>
我使用的帮助程序来自本网站上的另一个问题,但已修改为使用Rails 2:
application_helper.rb
def javascript_exists?(script)
script = "#{RAILS_ROOT}/public/javascripts/#{script}.js"
extensions = %w(.coffee .erb .coffee.erb) + [""]
extensions.inject(false) do |truth, extension|
truth || File.exists?("#{script}#{extension}")
end
end
然后我还init
包含的文件:
<script>
jQuery(document).ready(function() {
<%= "#{params[:controller].titleize}#{params[:action].titleize}.init();" if javascript_exists?("#{params[:controller]}_#{params[:action]}") %>
});
</script>
如果我的文件名为controller_action.js
,但是一旦重命名为controller_action.js.erb
,Rails就会生成错误,因为它无法找到它。
GET http://localhost:3000/javascripts/controller_action.js 404 (Not Found)
Uncaught ReferenceError: ControllerAction is not defined
更新
如果我使用.rjs
扩展名,那么就不会产生错误,但这似乎是因为Rails并不认为该文件存在。 (我使用javascript_exists?
扩展名更新了.rjs
。)
经过一些调试后,找到 文件:
/path/public/javascripts/circuit_list.js true
但如果使用false
,则返回.rjs
。
在浏览器中导航到http://localhost:3000/javascripts/controller_action.js
时出现路由错误:
No route matches "/javascripts/controller_action.js" with {:method=>:get}