我有一个用户模型,我正在编写一种更新电子邮件身份验证令牌的方法。当我尝试使用用户对象调用该方法时,它会引发验证错误,提交的密码为空。用户对象已经保存并且已经找到并从控制器调用gen_token方法(例如:user.gen_token)。我的部分代码如下所示:
#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 验证失败:密码不能为空,密码确认不能为空
我也意识到,如果我删除了save !,代码可以正常工作,因为它会更新email_token。现在我想知道在Model中是否有必要调用save或update_attribute,因为你可以通过执行self [attribute] = new_value来改变属性。
答案 0 :(得分:0)
.save调用对象的所有验证
如果要跳过验证,请使用update_column方法或update_attribute方法更新email_token
您还可以在验证中添加条件,例如
验证:密码,存在:true,on :: create