苦苦于理解这个块是如何工作的

时间:2012-05-02 18:21:19

标签: ruby-on-rails-3 testing factory-bot

我正在看铁路工厂,并且在理解这段代码时遇到了问题:

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。或者换句话说,“你”引用了什么。提前致谢。

1 个答案:

答案 0 :(得分:2)

在这种情况下,“u”实际上代表一个“Evaluator”类,它是factory_girl使用的内部代理。它是一个动态定义的类,它响应您在工厂中定义的属性的方法。

Evaluator允许您访问先前定义的属性值,如果属性乱序,它将生成,缓存并返回正确的值。例如,交换“password”和“password_confirmation”的顺序仍然有效,因为Evaluator的工作方式。

您可以在此处查看Evaluator的工作原理:https://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/evaluator.rb

在定义工厂时,您大多不需要担心Evaluator。你通常可以“u”在那里,就像它是User的一个实例,因为它会将缺少的方法委托给它正在构建的实例。