Ответ 1
Попытка и спасение служат различным целям. Цель try
- избавить вас от необходимости:
if user && user.email
Или любая ситуация, когда родительский объект может быть равен нулю, что вызовет NoMethodError на NilClass. Цель rescue
- обрабатывать исключения, которые вызывается вызовом метода. Если вы ожидаете, что исключение вызвано user.email
, вы можете rescue nil
его предотвратить, чтобы исключение не получилось.
В общем, я бы сказал, избегать использования rescue nil
, если вы точно не знаете, какие исключения вы спасаете, потому что вы можете спасти другое исключение, и вы никогда не узнаете об этом, потому что rescue nil
помешает вам увидеть его. По крайней мере, возможно, вы можете его зарегистрировать:
begin
...some code...
rescue => ex
logger.error ex.message
end