Rails 3:client_side_validations gem和设计密码验证

try*_*000 6 client-side-validation devise ruby-on-rails-3

我的client_side_validations gem在我的表单上工作得非常好.我正在为我的用户模型使用Devise,当我转到edit_user_registration表单时,除了:current_password,:password和:password_confirmation字段之外的所有内容都会抛出验证.

Fort实例是我将电子邮件留空,当我退出该字段时,验证会立即弹出.但是,如果我将current_password字段留空并且tab没有发生任何事情,那么当我提交表单时,我收到错误"1错误禁止此用户被保存:密码不能为空"

谢谢你的帮助

http://pastie.org/1907464

bca*_*lla 15

目前,ClientSideValidations将过滤掉任何条件验证器.Devise将一些验证器设置为条件:https://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rb#L24-32

我这样做的原因是因为没有好的方法让客户确定该条件的真实价值.我可以在生成表单时执行此操作,但如果该条件依赖于可以在表单上更改的值,该怎么办?所以我选择过滤它们,让事情回到服务器上.

这是一个想法,但显然它对某些事情施加了不公平的限制.这是最明显的(也很受欢迎).

所以我计划很快发布一个新版本,允许你明确覆盖条件过滤器.它会像这样工作:

<%= f.text_field :password, :validate => { :presence => true, :confirmation => true } %>
Run Code Online (Sandbox Code Playgroud)

要么

<%= f.text_field :password, :validate => true %>
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您可以选择关闭过滤器的验证器.在第二种情况下,它将为该属性上的所有验证器关闭过滤器.条件将在生成表单时进行评估,如果通过,则将验证器添加到input元素以供客户端使用.