2014-12-20 17 views
5

Tôi không hiểu rõ Rails bao gồm (hoặc không?) Một số tệp từ thư mục ứng dụng.Cách bao gồm Ngoại lệ tùy chỉnh trong Rails?

Ví dụ: tôi đã tạo một ứng dụng thư mục/ngoại lệ mới để tạo ngoại lệ của riêng mình. Bây giờ, từ một tập tin trợ giúp, tôi muốn nêu ra một ngoại lệ của mình.

Tôi có giả sử bao gồm thứ gì đó trong trình trợ giúp này không?

Các Helper: giúp đỡ/communications_helper.rb

//should I include something or it's suppose to be autoloaded? 
module CommunicationsHelper 
begin. 
. 
. 
. 
    raise ParamsException, "My exception is lauch!" 
rescue StandardError => e 
... 
end 
end 

Trường hợp ngoại lệ: trường hợp ngoại lệ/params_exception.rb

class ParamsException < StandardError 
    def initialize(object, operation) 
    puts "Dans paramsException" 
    end 

end 

Không có gì cụ thể từ tăng của tôi trong đầu ra ...

Cảm ơn!

EDIT: Nhờ tất cả, hai câu trả lời của bạn hữu ích theo cách khác. Tôi đã không nâng cao ngoại lệ như bạn đã nói, nhưng tôi cũng đã cố gắng cập nhật config.rb của mình. vì vậy bây giờ tôi đã:

rescue StandardError => e 
    raise ParamsError.new("truc", "truc") 

Câu hỏi khác, bạn có biết tôi có thể bắt đầu tăng lương ở đâu không? Vì tôi đã bị kẹt, nên tôi hơi bị mất ...

+0

Tôi khuyên bạn nên tạo bộ điều khiển riêng và định tuyến lỗi cho bộ điều khiển. Nó sẽ trông đơn giản. – Nithin

Trả lời

3

Trước tiên, tôi nghĩ rằng bạn đang tăng ngoại lệ của mình không chính xác.

Trong lớp ngoại lệ tùy chỉnh của bạn, phương thức khởi tạo của bạn nhận các đối số. Do đó, bạn nên nêu điều đó với:

raise CustomError.new(arg1, arg2, etc.) 

Read this.

Cuối cùng, không giải thoát khỏi StandardError nếu CustomError là con của StandardError; nếu không, thủ thuật 'nâng cao' của bạn sẽ được giải cứu.

4

Nếu bạn không nhìn thấy kết quả từ raise, hãy đảm bảo rằng bạn không vô tình xóa lỗi do lỗi của bạn là một lớp con của StandardError:

begin 
    raise ParamsException, "My exception is lauch!" 
rescue StandardError => e # This also rescues ParamsException 
end 

là một mặt lưu ý, trong Ruby đó là thực tế phổ biến để có lỗi tùy chỉnh của bạn kết thúc với Error hơn Exception. Không giống như một số ngôn ngữ lập trình khác, các lớp kết thúc bằng Exception có nghĩa là cho các lỗi cấp hệ thống.

+1

Đường ray sẽ tự động tải mọi thứ từ thư mục con của ứng dụng –

+0

Tôi cũng đã nghe nói về điều đó, vì vậy bạn nghĩ rằng tôi không phải thêm dòng config.autoload_paths + =% W (# {config.root}/app/exceptions) ? –

+1

@JulienLeray Tôi cũng đã thử nghiệm để xác minh. Bạn thực sự không phải thêm thư mục con của 'app' vào đường dẫn tự động tải. Nếu tải không thành công, bạn chắc chắn sẽ thấy một 'LoadError', vì nó không được giải cứu trong mã của bạn. – fivedigit

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