2011-12-21 1 views
1

私はObjective-cプログラマですので、メソッドの外にコードを持つことに慣れていません。「検証」はいつ実行されますか?

Railのvalidatesについて2部構成の質問があります。正確に実行validates方法である場合には

class User < ActiveRecord::Base 
    attr_accessible :name, :email 

    email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 

    validates :name, :presence => true, 
        :length  => { :maximum => 50} 

    validates :email, :presence => true, 
        :format  => { :with => email_regex }. 
        :uniqueness => true 

end 
  1. は、このコードを考えてみましょうか? Userインスタンスをインスタンス化するとき、またはそのクラス定義がロードされるとき?

  2. Userはいつ実際に検証されますか? Userインスタンスを保存するか作成するとどうなりますか?

答えて

2

インスタンスが作成されるときに、クラス定義を実行し、されていないときに、クラス定義内のコールのすべてが呼び出されます。変数email_regexはインスタンス変数ではなく、クラス定義のローカル変数です。

1

1)これらのメソッドは、Userクラス自体で呼び出され、そのインスタンスオブジェクトに検証を追加します。

2)保存するとき。

PS:valid_email gemを使用してメールアドレスを検証できます。

あなたはこれを行うことができます。

validates :email, :presence => true, :email => true 

を...あなたはGemfilevalid_emailを入れた後。

+0

+1の宝石の提案! – 0xSina

+0

実際に+1をクリックできます。 :P –

+0

うーん、それはなぜ登録していないかわからない。 – 0xSina

0

1 - 検証は、モデルの保存/作成の前にコールバックとして行われます。したがって、検証なしのモデルをインスタンス化できます。ただし、保存しようとすると、検証に合格する必要があります。

2ユーザーはいつ実際に検証されますか?ユーザーインスタンスを保存するか作成するとき

ユーザーは、保存または作成時に検証されます。必要に応じてこれをオーバーライドすることもできます。

0

あなたはレールコンソールで試しましたか?そのような質問があると、私はしばしばそれを対話的に見て、何が起こるかを見ます。

./script/console 
Loading develoment environment (...) 
>> #make a user here and see if you can 

ユーザーを保存しようとすると、指定した前提条件が満たされないとエラーが発生します。

0
  1. user.rbファイルが読み込まれたときに検証が実行されます。
  2. #saveまたは#validを呼び出すと、ユーザーは実際に検証されますか?
関連する問題