我正在研究Ruby on Rails应用程序并遇到问题。我在我的域中拥有用户模型,它有一个has_secure_password
字段,如下所示:
class User < ApplicationRecord
validates :name, presence: true
has_secure_password
validates :password, presence: true
validates :password, length: { in: 6..20, message: 'Password shoul be minimum 6 characters'}
end
我用这个函数保存用户对象:
def self.create_with_params(email,name,password)
user = User.new()
user.provider= :mail
user.name=name
user.email=email
user.password=password
user.activate_status=false
user.save(validate: true);
return user;
end
那也没关系。
但是当我想更新用户模型中的字段时。我收到了password
字段的验证错误。
@user = User.find_by(email: params[:email]) # this record has a valid password_digest field in database.
@user.name = 'John'
@user.save
puts @user.errors.full_messages
打印:
&#34;密码最少6个字符&#34;。
注意:我的用户表中有password_digest
字段。
我认为当我查询users
表格password_digest
字段时,无法填写模型上的password
字段。
有什么建议吗?
答案 0 :(得分:2)
我认为当我查询用户表时,password_digest字段不可能 填写模型上的密码字段。
正确,密码未存储,因此当您查询User
时,您没有获得password
字段,但您的模型每次都会询问:
validates :password, presence: true
因此,您需要在保存password
之前提供@user
才能使其正常工作,但我想这不是您想要的,所以只需从您的模型中删除该验证,
每次创建时,您都不需要验证password
,并且使用has_secure_password
进行验证。
另外,出于同样的原因,您需要将length
验证更新为:
validates :password, length: { in: 6..20, message: 'Password shoul be minimum 6 characters'}, allow_nil: true