2016-09-29 5 views
0

나는 그것을 단정하게 유지하려고 노력할 것이다.예외/오류가 발생했을 때 오류 처리

루비에서 예외가 발생하면 다른 값을 반환하는 가장 좋은 방법은 무엇입니까? 예외를 알려주는 에어 브레이크가 있지만 계속 진행하는 것을 멈추고 싶지는 않습니다. 지금까지 나는 다음과 같은 것을 가지고있다.

house = House.find(1) 
visitor_count = begin 
        house.visitors.count 
       rescue => e 
        Airbrake.notify(e) 
        0 
       end 

시작 블록이 아닌 다른 방법을 원한다면 궁금 할 것이다. 감사!

+0

시작/구조는 기본 오류입니다 처리 메커니즘. 그것은 귀하의 코드가 작동하는 것 같습니다. –

+0

그것은 작동하지만, 같은 일을하는 다른 방법이 있는지 궁금 해서요. – sclem72

+0

이것은 'StandardError'에서 확장 된 * 모든 예외를 구합니다. 간단한 예제를 위해서만이 작업을 수행하기를 바랍니다. 그러한 일반적인 예외를 맹목적으로 구제해서는 안되며, 실제로 당신이 실제로 기대하는 것만을 구해야합니다. –

답변

1

귀하의 솔루션이 분리되어 있습니다.

def num_house_visitors(id) 
    House.find(id).visitors.count 
rescue => e 
    Airbrake.notify(e) 
    0 
end 

난 당신이 처리하거나 처음부터 발생하지 예외 사례를 방지하기 위해 시도하는 것이 좋습니다 것입니다하지만, : 여기에 같은 논리를 구성하는 또 다른 방법입니다

house = House.find_by(id: id) # assuming Rails/ActiveRecord 
house = Struct.new('MissingHouse', :visitors).new([]) if house.nil? # prevent nil errors 

# House#visitors (and MissingHouse#visitors) always returns an array 
vistor_count = house.visitors.count # this can't fail