0

我正在查看 rails 中的工厂,并且在我对这段代码的理解中遇到了问题:

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

4

1 回答 1

2

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

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

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

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

于 2012-05-02T20:13:28.710 回答