gau*_*ssd 2 javascript ajax jquery ruby-on-rails 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" %>
Run Code Online (Sandbox Code Playgroud)
一切似乎都工作正常,直到我意识到服务器控制台显示以下错误:
ActionController::RoutingError (No route matches [GET] "assets/all.js")
Run Code Online (Sandbox Code Playgroud)
因此,由于除了错误之外,这一行似乎没有向应用程序添加任何内容,因此我将其删除。下次我启动服务器并使用该应用程序时,突然每个评论都会发布两次!?否则一切仍然正常。所以我再次添加了删除的行,我不知道为什么,但是当我添加该行时
<%= javascript_include_tag :all %>
Run Code Online (Sandbox Code Playgroud)
再次一切正常,只有一条评论按预期发布。但是我不想将其保留在代码中,因为它会引发错误。有人可以解释这种行为并告诉我如何解决这个问题吗?
Rails 3.1 使用链轮来捆绑 javascript 和 css 文件。这使得该:all选项被弃用。Sprockets 使用“神奇”注释来管理包含哪些 javascript。
所以你的application.js应该看起来像这样:
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
第一行还包括 jQuery 本身,因此您不需要其他脚本标记。您所需要做的就是指向应用程序。
<%= javascript_include_tag "application" %>
Run Code Online (Sandbox Code Playgroud)
如果您要部署到生产环境,则需要运行rake assets:precompile.
Railscasts有一个关于资产的剧集,这是必看的。