使用ruby on rails在json中发送错误消息

Om3*_*3ga 5 ruby json ruby-on-rails ruby-on-rails-3

我正在验证rails上的ruby中的输入字段.我检查用户是否输入或填写了这些字段.如果让我们说name字段未填充,则向用户发送错误消息,指示name字段未填充.其他错误也是如此.如何使用ruby on rails在json中发送此类消息.

这就是我现在正在做的事情.

这个模型

validates :email, :name, :company, :presence => true
validates_format_of :email, :with => /\A[a-z0-9!#\$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\z/
Run Code Online (Sandbox Code Playgroud)

这是我目前如何向客户端发送json数据

@contacts = Contact.new(params[:contact])

if @contacts.save
  render :json => { :error => 0, :success => 1 }
else
  render :json => { :error => 1, :success => 0 }
end
Run Code Online (Sandbox Code Playgroud)

Dan*_*ans 15

最简单的方法是发送错误的哈希值.

所以:

render :json => { :errors => @contacts.errors.as_json }, :status => 420
Run Code Online (Sandbox Code Playgroud)

请注意,:status => 420需要使jquery的$ .ajax方法调用它们的错误回调,并且在出现错误时不应返回200状态(默认值).

  • 这应该是HTTP 422,因为420不是标准的一部分(http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#420) (3认同)

nit*_*der 1

你真的应该使用http状态代码来告诉用户发生了什么,所以对于无效记录有

420 Invalid Record  Record could not be saved
Run Code Online (Sandbox Code Playgroud)

然后,在 JSON 返回中,您还可能有一条错误消息,该消息将返回您的活动记录/活动模型错误消息,以便为他们提供更多信息。

  • 这实际上应该是 HTTP 422,因为 420 不是标准的一部分(http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#420) (2认同)