2016-02-13 61 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