我正在寻找铁轨上的工厂,并且在理解此代码时遇到了问题:
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”指的是什么。提前致谢。
最佳答案
在这种情况下,“ u”实际上表示“ Evaluator”类,它是factory_girl使用的内部代理。这是一个动态定义的类,可响应您在工厂定义的属性的方法。
评估器允许您访问先前定义的属性值,并且如果属性顺序混乱,它将生成,缓存并返回正确的值。例如,由于评估程序的工作方式,交换“ password”和“ password_confirmation”的顺序仍然有效。
您可以在此处查看评估程序的工作方式:https://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/evaluator.rb
在定义工厂时,您通常不必担心评估器。通常,您可以在其中像用户实例一样在其中“ u”,因为它将将缺少的方法委派给正在构建的实例。