4

我想要的是

我使用带有 ajax 表单的新 rails respond_to Controller Api。如果一个对象没有验证 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/咖啡脚本

我只是将所有错误添加到一个字符串并显示它们..

$("#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 的一部分吗?
4

1 回答 1

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以开始进行表单验证。您仍然应该始终进行服务器端验证并返回任何错误。

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

这是一个简单的示例:http: //jsfiddle.net/GNq84/关于如何使用 showErrors 显示来自服务器端验证的错误消息。请注意,使用此示例多次提交效果会更好。

但是有一个警告, showErrors 预计会出现这样的错误:{ "element": "message" }而不是您当前拥有的错误是 : { "element": [ "message1", "message2" ] },但我会留给您解决 :)

于 2012-04-12T12:36:31.487 回答