【问题标题】:Return JSON response for errors when request's content-type is JSON当请求的内容类型为 JSON 时,返回 JSON 响应以获取错误
【发布时间】:2018-08-24 06:01:05
【问题描述】:

我有一个渲染 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-rails ruby-on-rails-4


    【解决方案1】:

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

    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。

    【讨论】:

    • 扩展我认为是一个很好的答案 - 我经常看到的是将 ErrorHandlerConcern 包含在基本控制器中,并定义所有方法以适当地挽救不同类型的异常在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2018-11-03
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多