引用 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
无关,但是如果你这样写,联赛会自动扩展到你上面指定的。
在下面的示例中,我希望 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
无关,但是如果你这样写,联赛会自动扩展到你上面指定的。