2

私が現在行っていることは次のとおりです。

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が空白でないことを確認します。

4

2 に答える 2

1

:allow_nilフラグvalidatesは興味深いかもしれません。このようなものが機能するはずです:

validates :new_pass,
          :allow_nil => true,
          :presence => {:if => :new_record?},
          :confirmation => {:if => :password_not_blank?},
          :length => {:within => 6...64, :if => :password_not_blank?}
于 2011-08-26T04:47:45.980 に答える
0
validates :new_pass,:presence => true ,:if => :new_record?
validates :confirmation ,:length =>:within => 6...64, :if => :password_not_blank?
于 2011-08-26T05:15:18.533 に答える