2016-11-11 58 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) 結束