Какая практика? Использовать try или использовать rescue?
user.try(:email)
VS
user.email rescue nil
post.try(:comments).try(:first).try(:author)
VS
post.comments.first.author rescue nil
Есть ли разница в использовании любого из них?
Какая практика? Использовать try или использовать rescue?
user.try(:email)
VS
user.email rescue nil
post.try(:comments).try(:first).try(:author)
VS
post.comments.first.author rescue nil
Есть ли разница в использовании любого из них?
Попытка и спасение служат различным целям. Цель 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
Оба кажутся подозрительными и могут маскировать другие ошибки. Вы уверены, что действительно хотите получить нуль? Может быть, лучше проверить, есть ли какие-либо комментарии в первую очередь, и явно покрыть пустой случай?
 Ничего не случилось - замечательный разговор Санди Меца, который помогает понять, почему @AdamByrtek на месте, и почему мы все должны отмечать неудачных случаях более умным, более объектно-ориентированным способом, который x ? y : nil