引用制作中的字段

时间:2015-03-01 18:12:08

标签: ruby rspec fabrication-gem

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

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

如何abbrname的前三个字母?

即。这会引发错误

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

2 个答案:

答案 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的值,则编辑为可选。