引用 Fabrication 中的字段

Referencing a field in a Fabrication

在下面的示例中,我希望 abbr 只是 name 的前 3 个字母,但我得到一个 >> 未定义的局部变量 name...我猜是因为name 超出 {} 块的范围?

Fabricator(:team) do
  name { Faker::Name.first_name }
  abbr { Faker::Name.first_name[0..2] }
  league { Fabricate(:league) }  
end

如何让 abbr 成为 name 的前三个字母?

即这会引发错误

Fabricator(:team) do
  name { Faker::Name.first_name }
  abbr { name[0..2] }  \ error name is undefined here
  league { Fabricate(:league) }  
end

您应该可以执行 before_save 回调...

Fabricator(:team) do
  before_save {|team| team.abbr ||= team.name[0..2] }
  name { Faker::Name.first_name }
  league { Fabricate(:league) }  
end

编辑为可选,如果缩写值被传递。

您也可以通过接受缩写值块中的属性散列来实现。

Fabricator(:team) do
  name { Faker::Name.first_name }
  abbr { |attrs| attrs[:name][0..2] }
  league
end

无关,但是如果你这样写,联赛会自动扩展到你上面指定的。