Versuch und Rettung dienen verschiedenen Zwecken. Der Zweck von tryist es, Sie davor zu bewahren, Folgendes tun zu müssen:
if user && user.email
Oder jede Situation, in der das übergeordnete Objekt möglicherweise Null sein kann, was einen NoMethodError in NilClass verursachen würde. Der Zweck von rescuebesteht darin, Ausnahmen zu behandeln, die durch Ihren Methodenaufruf ausgelöst werden. Wenn Sie erwarten, dass eine Ausnahme aufgerufen wird user.email, können Sie dies rescue niltun, um zu verhindern, dass die Ausnahme in die Luft sprudelt.
Im Allgemeinen würde ich sagen, vermeiden Sie die Verwendung, es rescue nilsei denn, Sie wissen explizit, welche Ausnahmen Sie retten, weil Sie möglicherweise eine andere Ausnahme retten, und Sie würden es nie erfahren, weil Sie es nicht sehen könnten rescue nil. Zumindest könnten Sie es vielleicht protokollieren:
begin
...some code...
rescue => ex
logger.error ex.message
end