Ruby on rails 如何自定义Rails3验证错误json输出?

Ruby on rails 如何自定义Rails3验证错误json输出?,ruby-on-rails,github-api,Ruby On Rails,Github Api,默认情况下,调用rails.model.to_json 将显示如下内容: {"name":["can't be blank"],"email":["can't be blank"],"phone":["can't be blank"]} 我需要生成一些可在服务客户端上使用的状态代码,而不是消息: [{"field": "name", "code": "blank"}, {"field": "email", "code": "blank"}] 此方法与github api v3错误非常相似-

默认情况下,调用rails.model.to_json

将显示如下内容:

{"name":["can't be blank"],"email":["can't be blank"],"phone":["can't be blank"]}
我需要生成一些可在服务客户端上使用的状态代码,而不是消息:

[{"field": "name", "code": "blank"}, {"field": "email", "code": "blank"}]
此方法与github api v3错误非常相似-


如何使用Rails实现这一点?

在控制器中,当呈现输出时,在JSON内容中添加以下内容:

render :json => @yourobject, :status => 422 # or whatever status you want.

希望这对您的模型有所帮助,您可以修改json的操作方式。例如,假设您有一个ActiveRecord模型
联系人
。您可以将
重写为_json
,以修改渲染行为

def Contact < ActiveRecord::Base

  def as_json
    hash = super

    hash.collect {|key, value|
      {"field" => key, "code" => determine_code_from(value)} 
    }
  end

end

另一个类似的问题。在这个线程中,rails“Responders”用于实现这一点。多米尼克,我问过不同的问题。很抱歉,如果我的问题不清楚。而且仍然不清楚,因为我的解决方案正好满足了您的要求()。您将得到如下内容:HTTP/1.1400错误请求内容长度:35{“message”:“Problems parsing JSON”}值是这样的字符串“不能为空”。也许有什么方法可以得到错误类型而不是消息。你说的错误类型是什么意思?所有验证都会引发相同的错误。键是导致错误的字段,值是消息。您希望示例中的“代码”是什么?如果不将“不能为空”消息用于其他任何内容,只需重写模型类中的消息,使其成为您希望的代码。例如,
验证:邮政编码,“320”
Hmm。。。在声明中覆盖消息是个好主意!我需要这个来实现api,它应该可以工作。
render @contact.as_my_custom_json