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」をカスタムパスワードとして使用した場合、これはどのようにして「foobar」を f.password_confirmation に割り当てることを知るのでしょうか。言い換えれば、「u」は何を参照しているのかということです。前もって感謝します。

4

1 に答える 1

2

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

エバリュエーターを使用すると、以前に定義された属性値にアクセスできます。属性が順不同である場合は、正しい値を生成、キャッシュし、返します。たとえば、「password」と「password_confirmation」の順序を入れ替えても、エバリュエーターの動作方法により機能します。

エバリュエーターがどのように機能するかは、https ://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/evaluator.rb で確認できます。

ファクトリを定義するときは、ほとんどの場合、エバリュエーターについて心配する必要はありません。不足しているメソッドを構築中のインスタンスに委譲するため、通常は User のインスタンスのように "u" を使用できます。

于 2012-05-02T20:13:28.710 に答える