javascript_include_tag:默认值不起作用

时间:2012-12-26 22:02:05

标签: ruby-on-rails-3

我正在将应用程序迁移到Rails 3.以下内容 - 我在一些地方看到过推荐 - 不起作用:

<%= javascript_include_tag :defaults %>

就我而言,它扩展到:

<script src="/assets/defaults.js" type="text/javascript"></script>

...导致404.据我了解,:defaults不应包含名为“defaults.js”的文件;它应该包括一些基本的东西,比如prototype.js和application.js。

请注意,在我的情况下,以下工作正常。只是如果可能的话,我宁愿使用官方推荐的方式:

<%= javascript_include_tag :prototype %>
<%= javascript_include_tag :application %>

我正在使用ruby 1.9.3运行Rails 3.2.8。

在我的config / application.rb(任何形式)中都有以下行。为了迁移到Rails 3,我创建了一个新的Rails 3应用程序,并使用该application.rb作为起点:

config.action_view.javascript_expansions[:defaults] = %w(foo.js bar.js)

在app / assets / javascripts中,我有:

Util.js
application.js
controls.js
dragdrop.js
effects.js
prototype.js

......以及一些特定于我的应用程序的东西。

2 个答案:

答案 0 :(得分:4)

自Rails 3.1以来,它使用资产管道。这意味着您需要更改资产管理。

您有一个assets/javascripts/application.rb文件,其中包含以下内容:

//= require jquery
//= require jquery_ujs
//= require_tree .

似乎你在javascripts存储库中包含了jquery,jquery_ujs和所有其他文件。使用最后一行,您无需在此文件中执行任何其他操作。您只需要在视图中包含应用程序文件,rails就可以管理所有内容:

<%= javascript_include_tag "application" %>

与样式表完全相同。

然后在生产环境中,资产(图像,样式表,javascripts)将被编译和缩小,以提高效率。

我建议您详细了解here

希望这有帮助

答案 1 :(得分:0)

以下是有关资产管道的更多信息 - http://guides.rubyonrails.org/asset_pipeline.html

这意味着可以更轻松地将您的Javascript分解为单独的文件进行开发,然后在生产中编译并最小化它们。