2016-02-13 62 views
2

我一直试图得到这个一段时间,但不能得到任何错误,以显示当用户通过ajax提交表单,表单失败(我不能得到一个成功的消息来显示或者但不是那么重要)。Rails - 无法获取错误,以显示失败的ajax表单提交

这里是我有什么

形式

<ul id="errors"> 

</ul> 

<%= form_for([@guide, @category, @key], url: guide_categories_keycreate_path(category_id: params[:id]), remote: true, :authenticity_token => true) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 

    <%= f.label :name, "Key name" %> 
    <%= f.text_field :name %> 

    <%= f.select :key_type, [['Value', 1], ['Text', 2], ['Image', 3]] %> 

    <%= f.submit "Next", :value => "Add New Key" %> 
<% end %> 

的JS渲染线在控制器上,如果密钥不保存

... 
else 
    respond_to do |format| 
    format.html { redirect_to edit_guide_category_path(@guide, @category) } 
      format.json { render :json => { :error => @key.errors.full_messages }, :status => 422 } 
    format.js 
    end 

的JavaScript

$(document).on "ajax:error", "form", (evt, xhr, status, error) -> 
    errors = xhr.responseJSON.error 
    for message of errors 
     $('#errors ul').append '<li>' + errors[message] + '</li>' 

表单不是我在它的正常密钥/创建视图中,加入代码中的某些内容会让你感到困惑,这可能会解释为什么它会这样。

不知道从哪里去,我基本上从this教程中复制了编码。我看了看,并尝试了几个教程,并看到了一些stackoverflow问题,这基本上是我需要的,但不会工作。不知道下一步该怎么做。

回答

1

的错误很可能会在这里:

$('#errors ul').append '<li>' + errors[message] + '</li>' 

应该

$('ul#errors').append '<li>' + errors[message] + '</li>' 

当你通过其idclass调用一个元素,如果类是元素本身,则需要在标识符之前引用元素;如果标识符是的元素,你可以用你的方式:

<ul class="errors"> 
    <li class="test">...</li> 
</ul> 

$("ul#errors") #-> selects ul with id of errors 
$("ul .test") #-> selects all nested elements with "test" class 

不知道下一步该怎么做。

您需要调试。

您的问题的概述,可以固定有以下几点:

  1. 看看有什么请求/响应正在通过开发控制台发送
  2. 确定是否有流中的任何错误(就像我提到的以上)
  3. 确保您的控制器都给予适当的回应

我最好的调试是如下的方式:

-

控制台

你需要确保你知道发生了什么事情在你的应用程序;你也有所有的工具来做到这一点。首先,你需要确保你知道哪些请求正在发送。通过developer console执行此操作。

在这两个火狐&铬..

Right Click > Inspect Element > Console > "Network" (tab) 

当你去这个选项卡,然后单击您的远程表上“提交”,你会看到的请求(和响应)出现。你可以用它来确定什么是错的:

enter image description here

你可以阅读更多here

-

JS

其次,你可以有你的流动问题。

使用上面的代码,您只发送JS请求(而不是JSON)。如果你想JSON,你必须设置type如下:

<%= form_for [@guide, @category, @key], url: guide_categories_keycreate_path(category_id: params[:id]), remote: true, authenticity_token: true, data: { type: :json } do |f| %> 

您还需要确保你的JS是正确格式化(我的第一个点)。最终,我无法梳理出每一行代码 - 您需要使用我概述的工具来查看问题可能是什么。

-

控制器

最后,最后的问题可能是与控制器。

虽然不太可能,但可能无法发送格式正确的请求等;导致你的控制器发送不正确的响应。

我会强烈建议您使用Rails的控制台,看看有什么地方出了错:

enter image description here

每次发送一个请求,你的应用程序时,控制台日志应该记录下来。因此,如果您有任何问题,您需要检查正在记录什么问题。如果你发布了这个版本,它可以更好地了解发生了什么

+1

哇!我会给它一个裂缝。你帮了我很多忙。我还有一个问题,我一整天都没有运气。它的嵌套形式阻止工作上帝知道什么时候(测试通过)。我无法弄清楚是什么导致它现在只通过表单上的id提交,而没有其他的东西http://stackoverflow.com/questions/35400048/rails-nested-forms-only-passing-the-id-on-form -提交 – Rob