2014-12-13 48 views
0

我有一個用戶模型,我正在寫一個方法來更新電子郵件身份驗證令牌。當我嘗試用用戶對象調用該方法時,它會引發驗證錯誤,即提交的密碼爲空。用戶對象已經保存並且已經找到並且從控制器調用了gen_token方法(例如:user.gen_token)。我的代碼部分如下所示:爲什麼.save在未更新的屬性上調用模型驗證?

#controller 
user.gen_token 
#User model 
validates :password, presence: true 
def gen_token 
    self[:email_token]=SecureRandom.urlsafe_base64 
    save! 
end 

我的問題是,當我只更新用戶模型的email_token屬性爲什麼密碼驗證提高嗎?

的錯誤如下: 的ActiveRecord :: RecordInvalid 驗證失敗:密碼不能爲空,確認密碼不能爲空

我也意識到,如果我刪除保存!代碼工作正如我所希望的那樣,它會更新email_token。現在我想知道在模型中是否需要調用save或update_attribute,因爲您可以通過執行self [attribute] = new_value來更改屬性。

+0

,你能告訴我們的錯誤? – Anthony 2014-12-13 11:59:03

+0

已更新。請看我的錯誤。我感謝任何幫助。 – 2014-12-13 13:44:34

回答

0

.save調用對象的所有驗證。
如果您想跳過驗證,請使用update_column方法或update_attribute方法更新email_token。
您也可以在您添加驗證條件像

驗證:密碼,存在:真,上:創建

相關問題