I would do something like this :
begin
@param_info.fetch(:drug).fetch(:name)
rescue KeyError
# handle key not found
end
You can do it in a single function :
def param_info_key(info, key1, key2)
info.fetch(key1).fetch(key2)
rescue KeyError
nil
end
param_info_key({}, :a, :b) # nil
param_info_key({a: {}}, :a, :b) # nil
param_info_key({a: {b: "foo"}}, :a, :b) # "foo"
Sample :
irb(main):001:0> s = {}
=> {}
irb(main):002:0> begin
irb(main):003:1* s.fetch(:foo).fetch(:bar)
irb(main):004:1> rescue KeyError
irb(main):005:1> puts "Key not found"
irb(main):006:1> end
Key not found
=> nil