Я использую код, идентичный моему коду password_reset, для моего кода изменения электронной почты.Пользователь хочет изменить свой адрес электронной почты, поэтому он вводит свой адрес электронной почты, нажимает кнопку и выходит из системы.
Им отправляется электронное письмо со ссылкой, по которой они щелкают, с кодом в качестве идентификатора, который затем сопоставляется с кодом, сохраненным в базе данных, чтобы подтвердить, что они на самом деле являются владельцами учетных записей.В любом случае, когда я нажимаю кнопку, я получаю сообщение об ошибке, показанное ниже.
Проблема в том, что я получаю эту ошибку:
ArgumentError in EmailsController#edit
comparison of String with ActiveSupport::TimeWithZone failed
Rails.root: /Users/greg/site
Application Trace | Framework Trace | Full Trace
app/controllers/emails_controller.rb:19:in `<'
app/controllers/emails_controller.rb:19:in `edit'
Request
Parameters:
{"id"=>"KdFTTeWuOGqpDm6F_iY7aw"}
Show session dump
Show env dump
Response
Headers:
None
Создание контроллера электронной почты:
def create
@user = User.find_by_email(params[:email_change][:email])
logout if logged_in?
@user.generate_and_store_email_change_token && UserMailer.email_change(@user).deliver if @user
flash[:success] = "Email sent with email reset instructions."
redirect_to root_url
end
Редактор контроллера электронной почты:
def edit
@user = User.find_by_email_change_token(params[:id])
if @user.nil?
flash[:error] = "The email change link you clicked has been used."
redirect_to root_url
elsif @user.email_change_sent_at < 2.hours.ago
flash[:error] = "Email change token has expired."
redirect_to email_change_url
end
end
Модель пользователя:
def generate_and_store_email_change_token
self.email_change_token = SecureRandom.urlsafe_base64
self.email_change_sent_at = Time.zone.now
save!(:validate => false)
end
def remove_used_email_change_token
self.email_change_token = nil
save!(:validate => false)
end
Это странно, потому что точно такой же код работает для сброса моего пароля.Я проверил снова, и я не получаю сообщение об ошибке, которое дает мне версия электронной почты.
С уважением