【问题标题】:ActiveSupport::TimeWithZone failed error in ruby on railsruby on rails 中的 ActiveSupport::TimeWithZone 失败错误
【发布时间】:2012-01-14 11:05:25
【问题描述】:

我正在使用与我的密码重置代码相同的代码作为我的电子邮件更改代码。 用户想要更改他们的电子邮件地址,所以他们输入他们的电子邮件地址,单击一个按钮,他们就退出了。

会向他们发送一封电子邮件,其中包含他们单击的链接,其中包含作为 id 的代码,然后将其与存储在数据库中的代码进行匹配,以确认他们实际上是帐户所有者。无论如何,当我单击时,我都会收到如下所示的错误。

问题是我收到此错误:

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

这很奇怪,因为完全相同的代码适用于我的密码重置。我再次测试,我没有收到电子邮件版本给我的错误。

亲切的问候

【问题讨论】:

  • email_change_sent_at 的类型是什么?你确定是日期时间吗?
  • 啊,是的!这解释了它现在,甚至没有我测试。我实际上记得昨天创建迁移并将属性类型设置为字符串。让我测试确认。
  • 感谢错误消失了!也许您可以发布您的答案,我可以接受并标记您。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 rubygems


【解决方案1】:

似乎email_change_sent_at 类型是string。你应该把它改成datetime

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    相关资源
    最近更新 更多