Rails 3的Api错误定制,如Github api v3

我在Rails3应用程序上添加了一个API,它非常好用。 但我在http://developer.github.com/v3/看到了以下Github api v3

HTTP/1.1 422 Unprocessable Entity Content-Length: 149 { "message": "Validation Failed", "errors": [ { "resource": "Issue", "field": "title", "code": "missing_field" } ] } 

我喜欢错误消息结构。 但无法让它重现。 我怎样才能让我的apis做出类似的回应?

您可以通过为JSON格式添加ActionController :: Responder来轻松实现该错误格式。 有关此类(非常模糊)的文档,请参阅http://api.rubyonrails.org/classes/ActionController/Responder.html ,但简而言之,您需要覆盖to_json方法。

在下面的示例中,我在ActionController中调用一个私有方法:Responder将构造json响应,包括您选择的自定义错误响应; 所有你需要做的就是填补空白,真的:

 def to_json json, status = response_data render :json => json, :status => status end def response_data status = options[:status] || 200 message = options[:notice] || '' data = options[:data] || [] if data.blank? && !resource.blank? if has_errors? # Do whatever you need to your response to make this happen. # You'll generally just want to munge resource.errors here into the format you want. else # Do something here for other types of responses. end end hash_for_json = { :data => data, :message => message } [hash_for_json, status] end