私が現在行っていることは次のとおりです。
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が空白でないことを確認します。