Jquery Rails 4-通过Ajax进行错误处理-错误未触发

Jquery Rails 4-通过Ajax进行错误处理-错误未触发,jquery,ruby-on-rails,ajax,Jquery,Ruby On Rails,Ajax,我试图提交一份“空白”表格来故意触发错误 但是,它仍然使用“Success”函数进行响应,并且没有标记错误。但是,没有添加任何记录 当我在输入字段中提交信息时,表单工作正常 表格: <%= simple_form_for :course, :url => {:action => 'create'}, :remote => true do |f| %> <%= f.input :title %> <%= f.submit "

我试图提交一份“空白”表格来故意触发错误

但是,它仍然使用“Success”函数进行响应,并且没有标记错误。但是,没有添加任何记录

当我在输入字段中提交信息时,表单工作正常

表格:

 <%= simple_form_for :course, :url => {:action => 'create'}, :remote => true do |f| %>      
   <%= f.input :title %>
   <%= f.submit "Submit" %>
 <% end %>
class Course < ActiveRecord::Base 
  validates :title, presence: true
end
create.js.erb

$(document).ready(function() {
  $("form").on("ajax:success", function(e, data, status, xhr) {
   alert("Success!");
  }).bind("ajax:error", function(e, xhr, status, error) {
    alert("Error!");
  });
 });
 <% if object && object.errors.size > 0 %>
   <div id="errorExplanation">
   <h2><%= pluralize(object.errors.size, "error") %> prohibited this record from being saved.</h2>
   <p>There were problems with the following fields:</p>
   <ul>
     <% object.errors.full_messages.each do |msg| %>
       <li><%= msg %></li>
     <% end %>
   </ul>
 </div>
<% end %>
共享/错误消息.html.erb

$(document).ready(function() {
  $("form").on("ajax:success", function(e, data, status, xhr) {
   alert("Success!");
  }).bind("ajax:error", function(e, xhr, status, error) {
    alert("Error!");
  });
 });
 <% if object && object.errors.size > 0 %>
   <div id="errorExplanation">
   <h2><%= pluralize(object.errors.size, "error") %> prohibited this record from being saved.</h2>
   <p>There were problems with the following fields:</p>
   <ul>
     <% object.errors.full_messages.each do |msg| %>
       <li><%= msg %></li>
     <% end %>
   </ul>
 </div>
<% end %>
0%>
禁止保存此记录。
以下字段存在问题:


你知道我做错了什么吗?谢谢

您不需要在
js.erb
文件中有
document.ready
。你可以这样做

控制器

if @result = @course.save
 ..
create.js.erb

<% if @result %>
  alert("Success!");
<% else %>
  $('#error-div').html('<%= j(render :partial => 'shared/error_messages', :object => @course) %>');
<% end %>

警惕(“成功!”);
$('#error div').html(''shared/error_messages',:object=>@course)%>');

您需要知道的事情:


错误

Ajax错误只发生在Ajax错误上(不是Rails错误)

我花了很长时间才弄明白这一点——仅仅因为Rails方法没有成功,并不意味着Ajax调用会触发错误。Ajax将成功,因为它将数据发送到服务器


状态

要调用Ajax错误函数,可以使用
status
参数发送错误头:


谢谢你的回复。那么,如何在rails引发的表单上显示错误呢?例如,“标题不能为空。”我已更新了答案。在这里,我将验证错误插入到id为error-div的div中。您可以执行类似的操作。啊,我明白了!非常感谢。因此,如果我想显示局部视图,我将如何将这些错误传递给局部视图?我更新了上面的问题,使用了我的partial.with the ajax回复