【发布时间】:2015-10-20 11:47:35
【问题描述】:
我的user 得到了这个验证:
validates :password,
presence: true,
confirmation: true,
length: { minimum: 6 },
:on => :create
这很明显。当我创建(注册)一个新的user 时,我想填写他们的密码,因此这就是presence: true 的原因。
案例 1) 当用户想要更新他的帐户(比如说更改他的用户名)时,表单只有 email 和 username 字段。没关系,验证也没问题。
案例 2)他忘记了密码,我将他的“忘记密码链接”发送给他,他正在创建新密码的页面上。该表单有这两个字段:密码和密码确认。但是,他将这两个字段都留空并提交了表单。验证通过,因为它只是:on => create!因为案例 1)
我无法添加:on => update,因为案例1)不会通过,因为没有密码字段。
在这种情况下我该怎么办?这个“问题”的最佳实践或真正的解决方案是什么?
【问题讨论】:
-
你说“案例2)不会通过,因为没有密码字段”是什么意思?
-
maxim pntyushenko:对不起,我打错了,这是“案例 1)不会通过”
-
您在使用 Devise 吗?
-
帕万:不,这没有帮助。当我尝试仅编辑/更新用户信息(电子邮件,用户名)时...验证未通过它会抛出(“密码不能为空”)
-
不是 100% 确定这一点,但我认为您可以创建两个验证集。一种用于
on: :create,一种用于on: :update。更新不包括存在或确认,只有长度。
标签: ruby-on-rails forms validation model