2012-02-22 1 views
4

iは良い例がどのようにレールが

私はAjaxフォームでコントローラーアピrespond_to新しいレールを使用して欲しいです。 オブジェクトがレールを検証しない場合、Jsonエラーオブジェクトを返し、 "ajax:error"イベントをトリガします。 対応するフォームフィールドの下に/それぞれのエラーを表示する(私たちは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によって解析されません。あなたはこれを自分で行う必要があります。はるかに徹底的なソリューションが必要とされているがhttp://jsfiddle.net/hpM6W/

how can i add the error message to the field?

はここでエラーを処理する方法の非常に簡単な例です。たとえば、サンプルでは、​​2回送信して何が起こるかを確認しました。

リッチクライアント側の検証とエラーメッセージの表示には、多くのツールキットとライブラリがあります。フォーム検証を開始するには、jQuery Validation Pluginをご覧になることを強くお勧めします。まだalways do server side validationにしてエラーを返す必要があります。

私が過去に行ったことは、ユーザーの利便性(より良いユーザーエクスペリエンス)としてクライアント側の検証を行い、jQuery検証プラグインを使用してサーバー側の結果をレンダリングするハイブリッドモデルですshowErrorsメソッドによる検証。

ここでは簡単な例を示します。showErrorsを使用してサーバー側の検証によるエラーメッセージを表示する方法については、http://jsfiddle.net/GNq84/を参照してください。この例では、複数回送信するほうがはるかに優れていることに注意してください。

1つの警告が、showErrorsはそうのようなエラーを見込んであり:{ "element": "message" }はなく何を電流である持っている:{ "element": [ "message1", "message2" ] }、私は:)

を解決するためにあなたにそれを残しておきますが、
関連する問題