我不知道为什么这不起作用,我正在学习rails并且我正在读一本书,它说这样做:
<%= form_for([@article,@article.comments.new ], :remote=>true, :html => {:display: none;' }) do |f|%><%= f.label :name %> <%= f.text_field :name %><%= f.label :email %> <%= f.text_field :email %><%= f.label :body %> <%= f.text_area :body %><%= f.submit %> <% end %>
但它不起作用,当我在firebug中检查请求时,url不会以.js结尾,你有什么想法吗?
当你检查在firebug中发出的请求时,仅因为url没有以.js结尾,这并不意味着它不是从javascript调用的.验证是否应检查请求标头以查看Accept参数是什么.如果它说"application/javascript"那么一切都很好.
其次,在开始尝试:remote => true时,一个非常常见的问题是所需的javascript库不包含在您的代码中.所以我的猜测是你的布局中缺少以下代码:
<%= javascript_include_tag :defaults %> <%= csrf_meta_tag %>
如果是这种情况,只需将其包含在布局的标记内即可.
最有可能发生的是您丢失了rails.js
文件,无论您使用的是原型还是jquery,它都会为您处理.
如果您使用的是jQuery,获取所有需要文件的最简单方法是使用jquery-rails
gem.这将添加一个生成器来安装jquery和所需的rails.js.
在rails应用程序根目录中键入类似内容:
rails g jquery:install
然后,在你application.html.erb
的内线添加
<%= javascript_include_tag :defaults %>
或明确(不要忘记单独包含您的jquery):
<%= javascript_include_tag :rails, :application %>
[编辑:使用资产管道的Rails 3.1或更高版本]
使用jquery-rails gem(如上所述)并添加以下行app/assets/javascripts/application.js
(如果它们不存在):
//= require jquery //= require jquery_ujs
希望这可以帮助!
检查你的/app/assets/javascript/application.js
文件
它应该包含在那里的文件下面.jquery_ujs
负责工作remote=> true
功能.
require `jquery` require `jquery_ujs`
快乐编码!!
如果尚未添加jquery_ujs文件,则会发生此错误.你刚才包含了jquery文件.
因此,您需要在视图中手动添加这两个文件,或者在application.js或您用于特定布局的任何其他文件中要求它们.
根据您的情况,您可以遵循第一或第二个解决方案.
第一解决方案
<%= javascript_include_tag :jquery, :jquery_ujs %>
第二解决方案
在app/assets/application.js中同时需要jquery和jquery_ujs
//= require jquery.js //= require jquery_ujs
在您的特定布局文件中包含application.js 文件.
<%= javascript_include_tag :application %>
注意:
还要在两个解决方案的布局文件中添加csrf标记.
<%= csrf_meta_tag %>
我想你的Gemfile中有以下代码并且已经安装了这个Gem.
gem 'jquery-rails'