2010-07-14 56 views
5

我有一个约束和一个验证放在guid字段上,以便每个都是唯一的。问题是,使用下面的工厂定义,我只能创建一个用户实例,因为其他实例未通过验证。使用Factory Girl创建具有唯一属性的实例

如何正确执行此操作以使guid字段始终是唯一的?然而

Factory.define(:user) do |u| 
    u.sequence(:guid) { |n| "key_#{n}" } 
end 

我认为,你不希望有一些类迭代器,但时间戳:

Factory.define(:user) do |u| 
    u.guid UUIDTools::UUID.timestamp_create.to_s 
end 

回答

10

一般来说,工厂女孩解决了序列问题。 这可以使用懒惰属性(即在运行时评估)来完成:

Factory.define(:user) do |u| 
    u.guid { Time.now.to_s } 
end 

或者,假设UUIDTools :: UUID.timestamp_create生成(希望适当格式化的)时戳:

Factory.define(:user) do |u| 
    u.guid { UUIDTools::UUID.timestamp_create.to_s } 
end 
+2

+1的OP出现问题的原因是因为guid创建代码是在工厂定义时间进行评估的,所以对于工厂的每次调用该值都是不变的。三种可能的解决方案中的第三种将在每次调用工厂时生成一个新的GUID,这几乎可以肯定OP正在寻找什么。 – 2010-07-14 15:42:58

相关问题