5

默认调用 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 错误 - http://developer.github.com/v3/

如何使用 Rails 实现这一目标?

4

2 回答 2

0

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

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

希望这可以帮助

于 2011-08-23T09:50:23.177 回答
0

在您的模型上,您可以修改 json 的运行方式。例如,让我们假设您有一个 ActiveRecord 模型Contact。您可以覆盖as_json以修改呈现行为。

def Contact < ActiveRecord::Base

  def as_json
    hash = super

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

end

当然,您也可以在控制器上Contact或什至在控制器中以单独的方法生成 json。你只需要稍微改变你的渲染方法。

render @contact.as_my_custom_json
于 2011-08-23T18:02:18.373 回答