2016-11-11 59 views
1

嗨我是迈克尔哈特尔教程之后,我遇到了奇怪的行为。@ user.reload不按预期工作(将年份更改为2000)

在第12章密码重置,password_reset_controller,创建操作是这样的:

def create 
    @user = User.find_by(email: params[:password_reset][:email].downcase) 
    if @user  
     @user.create_reset_digest 
     @user.send_password_reset_email 
     flash[:info] = 'Email sent with password reset instructions'  
     redirect_to root_url  
    else 
     flash.now[:danger] = 'Email address not found' 
     render 'new' 
    end 
    end 

而且create_reset_digest方法是这样的:

def create_reset_digest 
    self.reset_token = User.new_token 
    update_attribute(:reset_digest, User.digest(reset_token)) 
    update_attribute(:reset_sent_at, Time.zone.now) 
end 

我用byebug监测变化和碰上了一个奇怪的事情:

当我尝试byebug在创建操作结束时,我得到了这个结果:

#<User id: 762146111, ..., reset_sent_at: 2016-11-11 13:47:00 UTC> 

但是当我尝试看看发生了什么@ user.reload后保存,我得到:

#<User id: 762146111, ..., reset_sent_at: "2000-01-01 13:47:00"> 

为什么reser_sent_at切换到一年2000-01-01属性?

回答

0

尝试使用to_datetime

update_attribute(:reset_sent_at, Time.zone.now.to_datetime) 

create_reset_digest

+0

我试过这个,但它不工作。我甚至试着看看db:schema,它有,sent_at attrbute设置为时间>>'t.time“reset_sent_at”' – Kazik

+0

您需要进行迁移并将属性'time'更改为'datetime' –

0

试着改变你节省时间Time.now

高清create_reset_digest self.reset_token = User.new_token (:reset_digest,User.digest(reset_token)) update_attribute e(:reset_sent_at,Time.now) 结束