sclem72
sclem72

Reputation: 486

Error handling when Exception / Error is thrown

I'll try to keep it short a sweet.

In ruby, what would be the best way to return another value if an exception is thrown? I have airbrake to notify me of the exception for me, but I do not want to stop the process from continuing. So far I have something like this:

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

Wondering if there is anyway to do this other than a begin block. Thanks!

Upvotes: 0

Views: 139

Answers (1)

Kache
Kache

Reputation: 16677

Your solution (in isolation) is fine. Here's another way of organizing the same logic:

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

I would recommend that you try to handle or prevent exception cases from happening in the first place, though:

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

Upvotes: 1

Related Questions