jquery – 一个很好的示例rails respond_to如何处理模型验证错误和ajax表单

我想要的是

我使用新的rails respond_to Controller Api和ajax表单.
如果对象未验证rails,则返回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的一部分吗?

最佳答案 我必须自己解析json吗?

是的,jQuery Ajax API不会自动解析错误响应.你必须自己做.

如何将错误消息添加到字段?

以下是如何处理错误的一个非常快速的示例:http://jsfiddle.net/hpM6W/

虽然需要更详尽的解决方案.例如,我提供的样本提交了两次,看看会发生什么……

有许多工具包和库可用于富客户端验证和错误消息的呈现.我强烈建议您查看jQuery Validation Plugin以开始表单验证.您应该仍然是always do server side validation并返回任何错误.

我过去所做的是一个混合模型,我会做客户端验证,以方便用户(更好的用户体验),并使用jQuery Validation Plugin通过showErrors呈现服务器端验证的结果方法.

这是一个快速示例:http://jsfiddle.net/GNq84/,介绍如何使用showErrors显示来自服务器端验证的结果错误消息.请注意,通过此示例,多次提交效果会更好.

但有一点需要注意,showErrors预计会出现如下错误:{“element”:“message”}而不是你当前的错误:{“element”:[“message1”,“message2”]},但我会把它留给你来解决:)

点赞