Перехват ошибок в Ruby - PullRequest
       2

Перехват ошибок в Ruby

0 голосов
/ 12 января 2011

У меня есть утверждение, которое выглядит примерно так

if not @user.verified? or @user.credit_card.expired?
  # do stuff
end

Проблема в том, что @user еще не имеет кредитной карты, потому что expired? вызовет исключение из-за значения nil.

Есть ли краткий способ отловить встроенную ошибку, не прибегая к дополнительным операторам if?

Ответы [ 3 ]

1 голос
/ 12 января 2011

Чтобы избежать этого исключения, вы можете использовать встроенный в Rails 2.3 / 3 метод: try

if not @user.verified? or @user.credit_card.try(:expired?)
  # do stuff
end
0 голосов
/ 13 января 2011

код

@user.credit_card.expired?

Называется нарушением Закона Деметры . Этот закон гласит, что вы можете вызывать любой метод, который вам нравится, на @user, но не на @user.credit_card.

0 голосов
/ 12 января 2011

Gem andand позволяет вызывать защищенный метод тогда и только тогда, когда объект не нулевой.

Ваш фрагмент кода будет выглядеть следующим образом:

if not @user.verified? or @user.credit_card.andand.expired?
  # do stuff
end

Вы можете установить его с gem install andand и все готово.

Веб-сайт: http://andand.rubyforge.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...