Получается эта строка:
return unless user and user.email and not user.confirmed_at
не прервал отправку электронного письма.Вместо этого он просто прерывает код UserMailer, который вы видели выше, и сразу переходит к представлению, которое теперь ссылается на переменную экземпляра, которая не была установлена.Таким образом, по сути, ActionMailer работает точно так же, как обычный контроллер.
Чтобы решить эту проблему, я переместил условия, которые проверяют, отправлять ли электронное письмо в место, где я запускаю команду UserMailer.