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

Ruby 使用Factory Girl创建具有唯一属性的实例,ruby,factory-bot,Ruby,Factory Bot,我在guid字段上放置了一个约束和一个验证,以便每个都是唯一的。问题是,使用下面的工厂定义,我只能创建一个用户实例,因为其他实例无法通过验证 如何正确执行此操作以使guid字段始终唯一 Factory.define(:user) do |u| u.guid UUIDTools::UUID.timestamp_create.to_s end 一般来说,Factory Girl解决了序列问题: Factory.define(:user) do |u| u.sequence(:guid) {

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

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

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

一般来说,Factory Girl解决了序列问题:

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

或者,假设UUIDTools::UUID.timestamp\u create生成一个(希望格式适当)时间戳:

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

+1 OP出现问题的原因是guid创建代码是在工厂定义时计算的,因此每次调用工厂时该值都是常量。三种可能的解决方案中的第三种将在每次调用工厂时生成一个新的GUID,这几乎肯定是OP想要的。
Factory.define(:user) do |u|
  u.guid { UUIDTools::UUID.timestamp_create.to_s }
end