Rails:javascript_include_tag:所有目的?

时间:2011-12-06 17:13:51

标签: javascript jquery ruby-on-rails ajax include

我遇到了Rails和Jquery的问题。我使用AJAX为文章添加评论而不重新加载它们。以下代码自动包含在我的views / application.html中:

  <%= javascript_include_tag "application" %>
  <%= javascript_include_tag :all %>
  <%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" %>
  <%= javascript_include_tag  "http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" %>

一切似乎工作正常,直到我意识到服务器控制台显示以下错误:

ActionController::RoutingError (No route matches [GET] "assets/all.js")

因此,除了我删除它的错误之外,这行似乎没有向应用程序添加任何内容。下次我启动服务器并使用该应用程序时,每个评论都会被发布两次!?一切都还行不错。所以我再次添加删除的行,我不知道为什么,但是当我添加行

<%= javascript_include_tag :all %>

再一次,每一件事都可以正常工作,只有一条评论按预期发布。但是我不想在代码中保留它,因为它会抛出错误。有人可以解释这种行为并告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

Rails 3.1使用sprockets捆绑javascript和css文件。这使得:all选项不被使用。链轮使用“魔法”注释来管理包含哪些javascripts。

所以你的application.js应该是这样的:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .

第一行还包括jQuery本身,因此您不需要其他脚本标记。您需要的只是指向应用程序。

<%= javascript_include_tag "application" %>

如果要部署到生产环境,则需要运行rake assets:precompile

资产上有Railscasts episode,这是必看的。