ActiveSupport :: TimeWithZone - ошибка в ruby ​​на рельсах - PullRequest
0 голосов
/ 14 января 2012

Я использую код, идентичный моему коду 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

Это странно, потому что точно такой же код работает для сброса моего пароля.Я проверил снова, и я не получаю сообщение об ошибке, которое дает мне версия электронной почты.

С уважением

1 Ответ

2 голосов
/ 14 января 2012

Похоже, email_change_sent_at тип является string.Вы должны изменить его на datetime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...