2009-10-09 24 views

Trả lời

189

Một phương pháp "def" có thể đóng vai trò như một "bắt đầu" tuyên bố:

def foo 
    ... 
rescue 
    ... 
end 
+0

Cảm ơn Tôi chỉ muốn biết cách hoạt động. Thats khá nhiều những gì tôi đang tìm kiếm. Cảm ơn bạn. – Sid

+2

Ngoài ra, các định nghĩa lớp, định nghĩa mô-đun và (tôi nghĩ) 'do' /' end' khối các khối tạo thành các khối ngoại lệ ẩn. –

+0

bạn có thể thực hiện def rescue đảm bảo kết thúc không? –

41

Bạn cũng có thể giải cứu inline: "EXCEPTION"

1 + "str" rescue "EXCEPTION!" 

sẽ in ra kể từ 'String không thể ép buộc vào Fixnum'

+1

Làm thế nào để bạn giải cứu và hiển thị ngoại tuyến backtrace ngoại lệ? –

+0

cách trả lại ngoại lệ thực tế? – user1735921

21

Tôi đang sử dụng def/cứu hộ kết hợp rất nhiều với kiểm chứng thực ActiveRecord:

def create 
    @person = Person.new(params[:person]) 
    @person.save! 
    redirect_to @person 
rescue ActiveRecord::RecordInvalid 
    render :action => :new 
end 

Tôi nghĩ rằng đây là mã rất nạc!

14

Ví dụ:

begin 
    # something which might raise an exception 
rescue SomeExceptionClass => some_variable 
    # code that deals with some exception 
ensure 
    # ensure that this code always runs 
end 

Ở đây, def như một tuyên bố begin:

def 
    # something which might raise an exception 
rescue SomeExceptionClass => some_variable 
    # code that deals with some exception 
ensure 
    # ensure that this code always runs 
end 
Các vấn đề liên quan