验证与form_helper用户输入冲突的密码长度

时间:2014-03-09 01:30:29

标签: ruby-on-rails

有没有办法解决这个问题?基本上在我的用户模型中,我有一个密码验证来检查并确保用户具有最小密码长度

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的教程构建的,但我做了一些个人修改。但在大多数情况下,它完全相同。

1 个答案:

答案 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%确定我理解你的问题,所以如果这不是你想要的解决方案,请告诉我。