6

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

例如,我将电子邮件留空,当我退出该字段时,验证会立即弹出。但是,如果我将 current_password 字段留为空白并从中选择任何内容,那么当我提交表单时,我会收到错误消息“1 错误禁止保存此用户:密码不能为空”

谢谢你的帮助

http://pastie.org/1907464

4

3 回答 3

16

目前 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 } %>

或者

<%= f.text_field :password, :validate => true %>

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

于 2011-05-18T06:04:52.070 回答
4

master 分支现在支持这种格式。将您的 Gemfile 指向它,您应该会很好

于 2011-05-20T06:27:40.203 回答
0

这很简单!gem 扩展了 Rails 的默认表单构建器,您所要做的就是在您想要内联验证的任何 form_for(或简单表单用户的 simple_form_for)标签上设置一个 :validate => true 选项。表单构建器在模型验证上使用一些 rails 反射来生成一些 json,这些 json 将包含在表单之后的脚本标记中。然后,gem 的 Javascript 框架使用 json 来执行需要执行的验证。

<%= form_for(@user, :url => registration_path(resource_name), :validate => true) do |f| %>
于 2012-11-11T04:52:53.330 回答