我目前正在做的事情如下:
validates :new_pass,
:presence => {:if => :new_record?},
:confirmation => {:if => :password_not_blank?},
:length => {:within => 6...64, :if => :password_not_blank?}
def password_not_blank?
!new_pass.blank?
end
但这不是 DRY,我敢打赌,如果属性不存在,有一种方法可以跳过验证。
另外,没有任何 DSL 方法来验证吗?我认为它比在哈希中实现逻辑更干净......
-- 编辑,谢谢^^ --
这就是我现在得到的:
validates :new_pass,
:allow_blank => {:on => :update},
:presence => {:on => :create},
:confirmation => true,
:length => {:within => 6...64}
只是为了记录,所以没有人担心(?),这是一个虚拟属性,实际密码用 before_save 加密,检查 :new_pass 不是空白。