Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么在未更新的属性上保存调用模型验证?_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby 为什么在未更新的属性上保存调用模型验证?

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

我有一个用户模型,我正在编写一个更新电子邮件身份验证令牌的方法。当我尝试使用用户对象调用该方法时,它会引发验证错误,即提交的密码为空。用户对象已保存,已从控制器ex:User.gen_令牌中找到并调用了gen_令牌方法。我的部分代码如下所示:

#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


你能告诉我们错误吗?已更新。请看我的错误。谢谢你的帮助。