我不知道为什么这不起作用,我正在学习轨道,我正在读一本书,据说这样做:
<%= form_for([@article,@article.comments.new ], :remote=>true, :html => {:style=>'display: none;' }) do |f|%>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :email %>
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :body %>
<%= f.text_area :body %>
</div>
<%= f.submit %>
<% end %>
然而它不起作用,当我在firebug中检查请求时,url不会以.js结尾,你有什么想法吗?
答案 0 :(得分:34)
当你检查在firebug中发出的请求时,只是因为url没有以.js结尾,这并不意味着它不是从javascript调用的。验证是否应检查请求标头以查看Accept参数是什么。如果它说“application / javascript”那么一切都很好。
其次,开始尝试时遇到一个非常常见的问题:remote =&gt;的确,您的代码中不包含所需的JavaScript库。所以我的猜测是你的布局中缺少以下代码:
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
如果是这种情况,请将其包含在布局的<head>
标记内。
答案 1 :(得分:21)
最有可能发生的情况是,您缺少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
希望这有帮助!
答案 2 :(得分:7)
如果您尚未添加 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'
答案 3 :(得分:6)
检查您的/app/assets/javascript/application.js
文件
它应该包含在那里的文件下面。 jquery_ujs
负责处理remote=> true
功能。
require `jquery`
require `jquery_ujs`
快乐编码!!
答案 4 :(得分:4)
检查控制器:它是否有响应块?
如果您使用rails generate scaffold生成应用程序,它将具有类似
的内容 respond_to do |format|
format.html
format.xml { .... }
end
如果确实有,只需从整个区块中取出,从respond_to到结束;或者用单行替换整个块
respond_to :html, :js
或者通过添加此处显示的额外行来编辑块
respond_to do |format|
format.html
format.js
format.xml { .... }
end
要么适用于你的情况。
答案 5 :(得分:0)
如果您有一个file_field,那么它会以html格式提交,即使remote: true
-我花了很长时间来解决这个问题,所以我添加了这个答案也许可以节省其他人的时间,有解决方案,请使用远程宝石,请参见答案here
答案 6 :(得分:0)
如果以上答案均不能为您解决,请仔细检查您是否未呈现remote: true
(或local: false
)表单嵌套在页面中的另一表单中 。这给我们造成了问题。
答案 7 :(得分:-11)
更改:
[@article,@article.comments.new ]
代表
@article
我建议您阅读相关部分的API:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html