首页 > 解决方案 > 当请求的内容类型为 JSON 时,返回 JSON 响应以获取错误

问题描述

我有一个渲染 ERB 的 rails 应用程序,还有一个用于 API 端点的单独命名空间。

当出现错误时,比如 404,或一些未获救的异常......等等,rails 会在 HTML 中返回错误。

当请求的内容类型为 JSON 时,我不清楚如何/在何处放置将在 JSON 中响应的错误处理程序。

在我的 API 基本控制器中,我有 ruby rescue_from ActiveRecord::RecordNotFound, with: ->(e) { render_error(e, :not_found) }

并且能够捕获特定的错误,但我想要一个更大的包装器来处理任何未处理的异常。对此有什么好的做法建议吗?

导轨 4.2.4 红宝石 2.1.5

标签: ruby-on-railsruby-on-rails-4

解决方案


这就是我在我的应用程序中处理这种情况的方式

class ApiController < ApplicationController
  rescue_from ActiveRecord::RecordNotFound, :with => :not_found

  def not_found
    respond_to do |format|
      format.html { render :file => File.join(Rails.root, 'public', '404.html') }
      format.json { render :text => '{"error": "Record not found"}' }
    end
  end
end

或者,

你可以使用这个request.format.json 吗?找出请求的类型并根据您呈现 json 或 html。


推荐阅读