Tùy thuộc vào cách bạn sử dụng thư viện, có nhiều cách khác nhau để giải cứu các ngoại lệ.
Trong thư viện
Giả sử bạn đã tạo một wrapper để truy cập một số loại dịch vụ web, bạn có thể có các wrapper cứu ngoại lệ và luôn luôn trả về một "an toàn" dữ liệu.
Trong hành động
Nếu bạn gọi một phương thức cụ thể trong hành động và sự thành công phương pháp là một yêu cầu đối với các hành động, sau đó bạn có thể cứu nó trong hành động. Trong ví dụ sau, tôi giải quyết lỗi và hiển thị một mẫu cụ thể để xử lý sự cố.
def action
perform_external_call
rescue Timeout::Error => e
@error = e
render :action => "error"
end
Trong bộ điều khiển
Nếu cuộc gọi phương pháp có thể xảy ra trong nhiều hành động khác nhau, bạn có thể muốn sử dụng rescue_from
.
class TheController < ApplicationController
rescue_from Timeout::Error, :with => :rescue_from_timeout
protected
def rescue_from_timeout(exception)
# code to handle the issue
end
end
Nguồn
2010-03-03 10:14:20
Chưa bao giờ giải cứu 'Exception'. Là một thói quen lập trình xấu. Bạn nên giải cứu các ngoại lệ cụ thể hoặc ít nhất, 'StandardError'. –
"Ngoại lệ" có nghĩa là để làm rõ nơi để nắm bắt một cụ thể, nhưng bạn nói đúng, điều này nên đã được rõ ràng hơn! :) – xijo
Tôi đã biết cách làm điều này với ActiveRecord không tìm thấy. Tôi chỉ không biết những gì hoặc làm thế nào để giải cứu lỗi cụ thể đó. – kgpdeveloper