只有格式为json时,`rescue_from`才是例外

时间:2015-01-14 09:35:41

标签: ruby-on-rails ruby json

我在rails中有一个可以响应json和html的应用程序 我喜欢这样,当一条记录在保存时返回错误时,json的回答是这样的:

{
  "errors" : {
    "slug" : [
      "can't be blank"
    ],
    "title" : [
      "can't be blank"
    ]
  }
}

所以我将此代码添加到我的ApplicationController类。

rescue_from ActiveRecord::RecordInvalid do |exception|
  render json: { errors: exception.record.errors },
         status: :unprocessable_entity
end

我希望只有当格式为json时才调用此rescue_from,否则以标准方式运行(格式为html时)。我怎么能这样做?

更新 我找到了一个解决方案,但我认为这不是很好:

rescue_from ActiveRecord::RecordInvalid do |exception|
  respond_to do |format|
    format.json do
      render json: { errors: exception.record.errors },
           status: :unprocessable_entity
    end
    format.html { fail exception }
  end
end

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

有一种更好的方法。

例如:

  rescue_from ActionController::InvalidAuthenticityToken do |exception|
    raise unless request.xhr?
    render nothing: true, status: :unprocessable_entity
  end