rescue nil
это зло. Это не просто спасти ноль ошибок. Он съедает все, что вы бросаете в него. Например:
class Foo
def bar
end
def woo
raise ArgumentError
end
end
Foo.new.baz rescue nil # nil!
Foo.new.woo rescue nil # nil!
Это относится ко всем встроенным спасателям .
Ruby 2.3.0, в которых введен оператор безопасной навигации, который позволяет вам:
x&.lead_details&.last&.leads&.last&.country_id
ActiveSupport также имеет Object # try! метод, который можно использовать в более старых версиях Ruby:
x.try!(:lead_details).try!(:last).try!(:leads).try!(:last).try!(:country_id)
Но вы на самом деле просто писаете на закон Деметры, и вам следует рефакторинг кода, чтобы вам не пришлось проходить вниз эта безумная цепочка методов, потому что вы просто хороните тонны потенциальных ошибок и делаете невозможной отладку.
См .: