有没有办法解决这个问题?基本上在我的用户模型中,我有一个密码验证来检查并确保用户具有最小密码长度
validates :password, length: {minimum: 6 }
但是,当我让用户通过表单助手更新其他信息时,如果我不评论/删除上面的行,它就会拒绝更新。 以下是我的用户控制器中的一些代码,用于更新db表中的一些用户属性
def additional_info
@user = User.find params[:id]
end
def update
@user = User.find(params[:id])
if @user.update(user_addinfo)
redirect_to @user
else
render action: 'additional_info'
end
end
def user_addinfo
params.permit(:years_business, :years_relationships, :years_careers, :years_lifeoutlook)
end
end
非常感谢帮助。我的网站是围绕Michael Hartl的教程构建的,但我做了一些个人修改。但在大多数情况下,它完全相同。
答案 0 :(得分:2)
啊,我想我明白了。
您可以查看the has_secure_password
source,了解它为模型添加的验证,属性和其他内容。
您可能知道,has_secure_password
添加了attr_reader :password
以及#password=
设置器,只要您为密码属性指定了内容,就会计算password_digest
。这可以防止password
属性持久保存到数据库。 (良好!)
但这意味着,当您致电@user.update
时,它将位于@user
,其密码为nil
。
诀窍在于,您只想在初始设置密码时验证密码的长度。您应该能够通过将验证行更改为:
来解决此问题 validates :password, length: {minimum: 6 }, on: :create
如果您想允许用户更改密码,则必须执行其他操作,例如
validates :password, length: { minimum: 6 }, if: Proc.new { |u| u.password.present? }
如果有效,请告诉我。我不是100%确定我理解你的问题,所以如果这不是你想要的解决方案,请告诉我。