2015-05-25 34 views
0

我寫了一個簡單的定義爲什麼我不能直接用User.last.sign_up_completed保存?

def sign_up_completed! 
    self.sign_up_completed_at = Time.now.utc 
    end 

在軌控制檯,我試圖做User.last.sign_up_completed!

irb(main):004:0> User.last.sign_up_completed! 
    User Load (0.7ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 
=> 2015-05-25 15:37:24 UTC 

我不得不做以下爲了節省:

> User.last 
> u = _ 
> u.sign_up_completed! 
> u.save 

這是爲什麼?

回答

2

當您以這種方式修改屬性時,ActiveRecord不會保存。你的功能將需要

def sign_up_completed! 
    self.sign_up_completed_at = Time.now.utc 
    self.save! 
end 

或者,你可以使用update_attribute這樣,它會自動保存:

def sign_up_completed! 
    self.update_attribute :sign_up_completed_at, Time.now.utc 
end 

或根本不使用功能,只需要調用update_attribute用戶模型,但是這可能是較少可讀:

user.update_attribute :sign_up_completed_at, Time.now.utc 
相關問題