Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating instances with unique attributes using Factory Girl

I have a constraint and a validation placed on the guid field so that each is unique. The problem is, with the factory definition that I have below, I can create only one user instance, as additional instances fail validation.

How do I do this correctly so that the guid field is always unique?

Factory.define(:user) do |u|
  u.guid UUIDTools::UUID.timestamp_create.to_s
end
like image 964
Eric M. Avatar asked Jul 14 '10 13:07

Eric M.


1 Answers

In general, Factory Girl addresses the problem with sequences:

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

I assume, however, that you do not want to have something iterator-like but a timestamp. This could be done using lazy attributes (that evaluate at runtime):

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

Or, assuming that UUIDTools::UUID.timestamp_create generates a (hopefully suitably formatted) timestamp:

Factory.define(:user) do |u|
  u.guid { UUIDTools::UUID.timestamp_create.to_s }
end
like image 69
crispy Avatar answered Nov 06 '22 19:11

crispy