Мой ответ: код с ошибкой.
Во-первых, код reset_set должен быть передан обратно в контроллер через скрытое поле в форме или параметр в URL.
Во-вторых, если код возврата не передан (как показано), @user будет равен нулю, и вы получите AV. Вам нужно будет добавить пункт охраны вокруг кода:
if !@user
flash.now[:notice] = "User not found."
elsif request.post?
...
Кроме того, если он еще не включен в код, вам нужен способ истечения кодов сброса. В моей системе они истекают через пять дней. Вам нужно будет добавить дополнительное поле в таблицу пользователей. Сохраните дату, когда код был отправлен туда, и включите еще одну оговорку о том, что это в пределах данного периода времени.
(Помните, только то, что вы нашли его в сети, не означает, что это правильно и без ошибок).