Rails 3根据操作验证规则

Jer*_* B. 6 validation ruby-on-rails-3

这似乎是一个简单的问题,但我似乎找不到写自定义验证器的答案.我有这个验证器

validates :password, :presence => true, :confirmation => true, :length => { :minimum => 5}
Run Code Online (Sandbox Code Playgroud)

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

问题是我只希望在创建时应用状态,其他所有内容都需要在创建和更新时使用.因为用户在更新其信息时可能不会更改密码.

我试过拆分规则

validates :password, :presence => true, :on => :create
validates :password, # The rest of the rules
Run Code Online (Sandbox Code Playgroud)

这导致所有规则被忽略以进行更新.是否有一种简单的方法可以仅应用一个规则来创建,其余的应用于所有内容?

Dyl*_*kow 6

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

validates :password, :presence => {:on => :create}, :confirmation => true, :length => { :minimum => 5}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定总是要求最小长度是有意义的,但并不总是要求存在 - 如果使用空白密码更新现有记录,则无论如何都将失败验证,因为长度为0.