2012-04-18 14 views
1

私はAgile Web Development with Railsのような書籍になぜvalidates_whatever_ofという妥当性検査の方法がないのか迷っていたので、すべての妥当性検査の例はvalidates :attr, :whatever => trueを使って行われましたか?私はRailsを学び始めました。これで私は混乱しました!Railsのバリデーション3.2

答えて

2

3.xでは
validates_presence_of :user_name 

は、あなたが今やる:

validates :username, :presence => true 

古い方法はまだサポートされている、私は思いますしかし、廃止予定です。

これは実際には同じことを表現するための別の方法です。古い本やチュートリアルではこれを使用しますが、それを3.x形式に変換するのはかなり簡単です。たとえば、http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validatesを参照してください。

2

validatesの構文は、同じことについてはちょうどnew shortcutです。これは、同じような制限を持つ多数の属性を検証する場合に特に便利です。だから、この:

validates_presence_of :one 
validates_presence_of :two 
validates_presence_of :three 
validates_presence_of :four 

はまた、カスタムバリデータに素敵な、一貫性のあるインターフェースです

validates :one, :two, :three, :four, :presence => true 

に減少させることができます。あなたが何か言っていたのRails 2.xでは、では

+0

しかし、 'validates_presence_of:one、:two、:three、:four'も動作します – Ansd

+0

ああ、そうだと思います。 :-)それはおそらく工夫されているかもしれませんが、新しいスキームでは、 'validates'に" validates "を付けることによって、" presence "の他に' validates'を使って他の側面を検証することもできます。新しいスキームの最良の議論は、ActiveRecord :: Baseにパッチを当てることなく拡張可能であることです。上記の例のように、カスタムバリデーターを追加することができ、 'validates'のオプションとして利用可能になります。たとえば、EmailValidatorを作成すると、 ':valid => true'が利用可能になります。 –

+0

非常に有用なロブ。ありがとう! :) – Ansd