2012-04-10 33 views
5

Ok vì vậy tôi có phương pháp này của một ứng dụng tôi đang làm việc và nó hoạt động trong sản xuất. Câu hỏi của tôi tại sao nó hoạt động? Cú pháp Ruby mới này có phải không?Tại sao cú pháp cứu hộ này hoạt động?

def edit 
    load_elements(current_user) unless current_user.role?(:admin) 

    respond_to do |format| 
    format.json { render :json => @user } 
    format.xml { render :xml => @user } 
    format.html 
    end 

rescue ActiveRecord::RecordNotFound 
    respond_to_not_found(:json, :xml, :html) 
end 
+1

Xem thêm http://stackoverflow.com/questions/1542672/how-does- one-use-rescue-in-rails-without-the-start-and-end-block –

Trả lời

13

rescue s không cần phải được gắn với một rõ ràng begin khi họ đang ở trong một phương pháp, đó chỉ là cách cú pháp được xác định. Ví dụ: xem #19 herethis SO question, cũng như the dupe above.

+0

Cảm ơn ... Liên kết đẹp. – Vik

0

rescue chữ là một phần của định nghĩa phương pháp

Nhưng trong điều khiển tốt hơn để giải cứu lỗi với rescue_from

-2

thử này

def edit 
    begin 
    load_elements(current_user) unless current_user.role?(:admin) 

    respond_to do |format| 
     format.json { render :json => @user } 
     format.xml { render :xml => @user } 
     format.html 
    end 

    rescue ActiveRecord::RecordNotFound 
    respond_to_not_found(:json, :xml, :html) 
    end 
end 
+0

Tôi biết rằng nó sẽ hoạt động .... câu hỏi của tôi là tại sao cú pháp của tôi hoạt động – Trace

+0

Hoàn toàn hợp pháp để sử dụng 'rescue' bên trong một định nghĩa phương thức (và ngầm định 'bắt đầu') mà không có' bắt đầu' rõ ràng. –

2

giải cứu có thể hoạt động độc lập. không cần bắt đầu và kết thúc luôn.

Bạn có thể sử dụng cứu hộ dưới dạng dòng đơn của mình để trả về giá trị khi mọi thứ khác trên dòng đi xiên:

h = { :age => 10 } 
h[:name].downcase       # ERROR 
h[:name].downcase rescue "No name" 
+0

Điều này sử dụng nó như là một sửa đổi tuyên bố, mặc dù, đó không phải là câu hỏi của OP. Bạn đúng, tất nhiên, nhưng nó không trực tiếp trả lời câu hỏi. –

Các vấn đề liên quan