我使用的密码与我的密码重置代码完全相同,用于我的电子邮件更改代码。 用户想要更改他们的电子邮件地址,以便他们键入他们的电子邮件地址点击一个按钮,他们已注销。ActiveSupport :: TimeWithZone在Ruby on Rails上失败错误
一封电子邮件发送给他们包含他们点击的链接,包含一个代码作为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'的类型是什么?你确定它是日期时间吗? – 2012-01-14 11:19:01
啊,是的!现在解释它,甚至测试我。我实际上记得创建迁移并将属性类型设置为字符串。让我测试以确认。 – LondonGuy 2012-01-14 11:25:02
感谢错误消失了!也许你可以发布你的答案,我可以接受它并标记你。 – LondonGuy 2012-01-14 11:31:52