2012-02-22 32 views
4

我想一個很好的例子如何軌的respond_to與模型驗證錯誤和Ajax的形式工作

我使用的respond_to控制器的API新軌與阿賈克斯的形式是什麼。 如果對象不驗證軌道返回一個JSON錯誤對象,並觸發「AJAX:錯誤」事件。 我想顯示下一個/相應的表單字段下(我們使用formatastic)每個錯誤。

這裏我的實施例..

控制器:

class Admin::PrivateMessagesController < AdminController 
    respond_to :json 

    def create 
    private_message = PrivateMessage.new(params[:private_message]) 
    private_message.save 
    respond_with private_message 
    end 
end 

視圖

<%= form_for @private_message, :remote => true, :html => {"data-type" => "json"} do |f| 
    f.input :body 
... 
    end %> 

JS/CoffeeScript的

我只是添加所有錯誤爲字符串,並告訴他們..

$("#new_private_message").on 'ajax:error', (event, data, status) -> 
    error = "Errors: " 
    $.each $.parseJSON(data.responseText), (field, errorMessage) -> 
    error += "#{field}-#{errorMessage} " 
    $('#errors').html(error) 

JSON錯誤對象

{"body":["Please enter a message."],"subject":["Please enter a message."]} 

我的問題!

  • 我必須自己解析json嗎?
  • 我如何添加錯誤消息到外地?
  • 豈不是標準的jQuery-UJS的一部分?

回答

2

do i have to parse the json myself?

是的,錯誤的反應不被jQuery的AJAX API自動解析。你必須自己做。

how can i add the error message to the field?

下面是如何處理的錯誤一個很簡單的例子:http://jsfiddle.net/hpM6W/

雖然需要更詳盡的解決方案。比如我提供兩次提交,並看看會發生什麼樣......在

有許多工具包和庫豐富的客戶端驗證和錯誤消息的呈現。我會強烈建議看jQuery Validation Plugin開始使用表單驗證。您仍應該always do server side validation並返回任何錯誤。

我在過去所做的是一個混合模型,我將做客戶端驗證作爲方便用戶(更好的用戶體驗)以及使用jQuery驗證插件呈現服務器端的結果通過showErrors方法驗證。

下面是一個快速示例:http://jsfiddle.net/GNq84/關於如何使用showErrors顯示服務器端驗證所產生的錯誤消息。請注意,使用此示例多次提交效果會更好。

然而有一點需要注意,showErrors預計像這樣的錯誤:{ "element": "message" },而不是你目前有哪些是:{ "element": [ "message1", "message2" ] },但我會離開,你來解決:)

相關問題