查看特定模型上的JSON错误

时间:2013-07-31 08:51:12

标签: ruby-on-rails json validation jbuilder

我有一个名为Entity的模型,控制器中的创建操作如下所示:

# enitities_controller.rb
def create
   # loading params, etc...
   @entity.save
   respond_with @entity
end

我使用jbuilder来自定义JSON视图而不是渲染@entity.to_json,这非常有用。我有最后一个问题,即由于验证错误导致模型无法保存,我得到以下响应(状态为422 Unprocessable Entity):

{"errors":{"parent_share":["can't be blank","is not a number"]}}

我想用自己的方式覆盖这个json。我知道他可以用{:1>替换respond_with @entity

respond_with @entity do |format|
  if @entity.errors.any?
    format.json {
      render "entities/create", :status => :unprocessable_entity
    }
  end
end

但是,不应该通过定义某种错误视图或其他东西来实现更自动化的方法吗?这感觉有点脏,这使我每次需要时都要编写更多代码而不是允许我使用respond_with。还有另一种方式吗?

1 个答案:

答案 0 :(得分:1)

与此同时,我找到了答案:

您必须创建文件lib/application_responder.rb并添加以下内容:

class ApplicationResponder < ActionController::Responder
  include Responders::FlashResponder
  include Responders::HttpCacheResponder

  def to_json
    set_flash_message! if set_flash_message?
    if !has_errors? || response_overridden?
      default_render
    else
      controller.default_render( status: :unprocessable_entity )
    end
  end

end

并将以下内容添加到您的应用程序响应程序:

self.responder = ApplicationResponder

这样做是添加一个to_json方法,该方法将复制to_js响应者的行为。