2011-05-05 24 views
6

这看起来像一个简单的问题,但我似乎无法找到一个写自定义验证器的答案。我有这个验证器Rails 3验证基于操作的规则

validates :password, :presence => true, :confirmation => true, :length => { :minimum => 5} 

有更多的规则应用,如一些正则表达式的复杂性,但这给出了要点。

问题是我只想要在创建时应用状态,其他所有事情都需要在创建和更新时应用。因为用户在更新信息时可能没有更改密码。

我试图分裂规则

validates :password, :presence => true, :on => :create 
validates :password, # The rest of the rules 

这导致了更新被忽略的所有规则。是否有一种简单的方法可以只应用一个规则来创建,其余的都应用于其他方面?

回答

6

你可以尝试将其保持在同一行,但应用:on => :create只是在:presence检查:

validates :password, :presence => {:on => :create}, :confirmation => true, :length => { :minimum => 5} 

但是,我不知道它是有道理的总是需要的最小长度,但并不总是需要存在 - 如果使用空白密码更新现有记录,则由于长度为0,因此无法验证验证。

+0

好点。我可能需要更深入地研究它。如果输入的密码为空,则某些要求可能会失败。 – 2011-05-05 15:01:13

0

我的直觉是问题是验证:密码调用不是加法的。您可以将存在检查切换为:

validates_presence_of :password, :on=>:create 

然后使用验证保留其他验证。那样有用吗?