0

私は次のerrors_controller.rbを持っています

class ErrorsController < ActionController::Base
layout 'bare'

def show
return render_error params[:id], :ok
end

def index
  request.format.to_s.downcase == 'application/json' ? json_error : html_error
  return
end

private

def exception
  env['action_dispatch.exception']
end

def html_error
  if exception.nil?
    render_error 404
  else
    render_error 500
  end
end

def json_error
  if exception.nil?
    render json: error_hash(:resource_not_found), status: 404
  else
    render json: error_hash(:internal_server_error), status: 500
  end
end

def error_hash(code)
  {
    errors: [
      {
        message: I18n.t("errors.api.#{code}"),
        code: code
      }
    ]
  }
end

def render_error(code, status_type = nil)
  @error = ErrorMessage.new(code, status_type)
  render @error.partial, status: @error.status
end
end

/api/test.xml に対してリクエストを行うと、

ActionView::MissingTemplate at /api/test.xml
Missing template messages/show with {:locale=>[:en], :formats=>[:xml],       :handlers=>[:erb, :builder, :raw, :ruby, :haml]}

やりたくない

rescue_from(ActionController::MissingTemplate)

これにより、URL にスペルミスがあったとしても、すべてのアクション欠落テンプレート エラーが処理されるためです。

あらゆるリクエスト (.xml、.jpeg、.....) に対して 404 をスローする健全なアプローチが必要です。

試み

まだ追加しようとしましたbefore_filterが、同じエラーが発生します。

私はapplication.rbに追加config.action_dispatch.ignore_accept_header = trueしましたが、まだうまくいきません。

誰でもこれで方向性を教えてもらえますか? 前もって感謝します

4

1 に答える 1

1

できるよ:

def render_error(code, status_type = nil)
  @error = ErrorMessage.new(code, status_type)
  respond_to do |format|
    format.any(:html, :json) { render @error.partial, status: @error.status }
    format.any { head 404, "content_type" => 'text/plain' }
  end
end
于 2015-03-13T16:04:28.720 に答える