2012-05-02 45 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」作爲自定義密碼的情況下,如何知道將「foobar」分配給f.password_confirmation。換句話說,'你'提到什麼。提前致謝。

回答

2

在這種情況下,「u」實際上代表「評估者」類,它是factory_girl使用的內部代理。它是一個動態定義的類,它響應您在工廠定義屬性的方法。

Evaluator允許您訪問先前定義的屬性值,如果屬性出現故障,它將生成,緩存並返回正確的值。例如,交換「密碼」和「密碼確認」的順序仍然可以工作,因爲評估者的工作方式。

你可以看到計算器如何在這裏工作:https://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/evaluator.rb

你大多不需要定義工廠時擔心計算器。您通常可以像在用戶那樣「ü」,因爲它會將缺少的方法委託給它正在構建的實例。

+0

刪除我的答案,因爲這是更徹底的 – DVG

+0

@Joe謝謝你,這是一個很好的解釋! – Tom