Chúng tôi đã tạo một viên ngọc để thực hiện điều này cho bạn: exception_handler
.
Ngoài ra còn có hướng dẫn tuyệt vời here.
Tôi cũng đã viết một câu trả lời mở rộng về chủ đề here.
Middleware
# config/application.rb
config.exceptions_app = ->(env) { ExceptionController.action(:show).call(env) }
khiển
# app/controllers/exception_controller.rb
class ExceptionController < ApplicationController
respond_to :json, :js, :html
before_action :set_status
def show
respond_with @status
end
private
def set_status
def status
@exception = env['action_dispatch.exception']
@status = ActionDispatch::ExceptionWrapper.new(env, @exception).status_code
@response = ActionDispatch::ExceptionWrapper.rescue_responses[@exception.class.name]
end
end
end
Xem
# app/views/exception/show.html.erb
<h1>404 error</h1>
này là rất đơn giản versi on - Tôi có thể giải thích thêm nếu bạn muốn.
Về cơ bản, bạn cần phải móc vào phần mềm trung gian config.exceptions_app
, nó sẽ nắm bắt bất kỳ ngoại lệ nào trong ngăn xếp middleware
(trái với toàn bộ môi trường), cho phép bạn gửi yêu cầu đến controller#action
của riêng bạn.
Nếu bạn nhận xét, tôi sẽ giúp bạn thêm một số chi tiết nếu bạn muốn!
Nguồn
2014-06-16 08:33:18
Tôi nghĩ rằng tài liệu tham khảo thứ hai của bạn có những gì bạn muốn. ** nhưng hầu như không có gì cho Rails 4 **, bạn có chắc là tham chiếu thứ hai không hoạt động trên đường ray 4 không? Bạn đã làm gì? –