在下面的示例中,我希望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
答案 0 :(得分:3)
您也可以通过接受abbr值块中的属性hash来实现。
Fabricator(:team) do
name { Faker::Name.first_name }
abbr { |attrs| attrs[:name][0..2] }
league
end
不相关,但如果您这样写,联盟将自动扩展到您上面指定的内容。
答案 1 :(得分:2)
你应该可以做一个before_save回调......
Fabricator(:team) do
before_save {|team| team.abbr ||= team.name[0..2] }
name { Faker::Name.first_name }
league { Fabricate(:league) }
end
如果传递了abbr的值,则编辑为可选。