2012-05-02 7 views
0

どのように動作するかを理解するのに苦労:このブロックは、私がレールに工場で探していますと、このコードの私の理解で問題を直撃している

Factory.define :user do |f| 
    f.username "foo" 
    f.password "foobar" 
    f.password_confirmation { |u| u.password } 
end 

は私がのため以外のすべての仕組みを理解し

f.password_confirmation { |u| u.password } 

"foobar"をカスタムパスワードとして使用した場合、f.password_confirmationに "foobar"を割り当てる方法を知ることができます。あるいは言い換えれば、 'u'の参照は何ですか?前もって感謝します。

答えて

2

この場合の「u」は、実際には「Evaluator」クラスを表します。これはfactory_girlで使用される内部プロキシです。これは、ファクトリで定義している属性のメソッドに応答する、動的に定義されたクラスです。

Evaluatorを使用すると、以前に定義された属性値にアクセスできます。属性が正しくない場合、正しい値が生成され、キャッシュされ、返されます。たとえば、「パスワード」と「パスワード確認」の順序を入れ替えることは、Evaluatorが動作するために機能します。

あなたが評価者は、ここでどのように機能するかを見ることができます:https://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/evaluator.rb

工場を定義するときは、ほとんどが評価者を心配する必要はありません。不足しているメソッドをビルドしているインスタンスに委譲するため、ユーザーのインスタンスのように一般的にそこに "u"することができます。

+0

これははるかに徹底しているので私の答えを削除する – DVG

+0

@ジョーそれは素晴らしい説明です! – Tom

関連する問題