Ruby 为什么在未更新的属性上保存调用模型验证?
我有一个用户模型,我正在编写一个更新电子邮件身份验证令牌的方法。当我尝试使用用户对象调用该方法时,它会引发验证错误,即提交的密码为空。用户对象已保存,已从控制器ex:User.gen_令牌中找到并调用了gen_令牌方法。我的部分代码如下所示:Ruby 为什么在未更新的属性上保存调用模型验证?,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我有一个用户模型,我正在编写一个更新电子邮件身份验证令牌的方法。当我尝试使用用户对象调用该方法时,它会引发验证错误,即提交的密码为空。用户对象已保存,已从控制器ex:User.gen_令牌中找到并调用了gen_令牌方法。我的部分代码如下所示: #controller user.gen_token #User model validates :password, presence: true def gen_token self[:email_token]=SecureRandom.urlsa
#controller
user.gen_token
#User model
validates :password, presence: true
def gen_token
self[:email_token]=SecureRandom.urlsafe_base64
save!
end
我的问题是,当我只更新用户模型的email\u token属性时,为什么要对密码进行验证
错误如下:
ActiveRecord::RecordInvalid
验证失败:密码不能为空,密码确认不能为空
我还意识到,如果我删除save!,代码正常工作,因为我希望它将更新电子邮件令牌。现在我想知道在模型中是否需要调用save或update_属性,因为您可以通过执行self[attribute]=new_值来更改属性 。保存调用对象上的所有验证。 如果要跳过验证,请使用更新列方法或更新属性方法更新电子邮件令牌。 您还可以在验证中添加条件,如 验证:密码,状态:true,on::create
你能告诉我们错误吗?已更新。请看我的错误。谢谢你的帮助。