使用Factory Girl创建具有唯一属性的实例

时间:2010-07-14 13:19:11

标签: ruby factory-bot

我在guid字段上有一个约束和验证,因此每个都是唯一的。问题是,根据我在下面的工厂定义,我只能创建一个用户实例,因为其他实例无法通过验证。

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

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

1 个答案:

答案 0 :(得分:11)

通常,Factory Girl通过序列解决问题:

Factory.define(:user) do |u|
  u.sequence(:guid) { |n| "key_#{n}" }
end
但是,我假设您不希望有类似迭代器的东西,而是时间戳。 这可以使用惰性属性(在运行时评估)来完成:

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