2010-07-14 2 views
5

У меня есть ограничение и валидация, помещенная в поле guid, чтобы каждый был уникальным. Проблема заключается в том, что с определением фабрики, которое у меня есть ниже, я могу создать только один экземпляр пользователя, поскольку дополнительные экземпляры не проверяют проверку подлинности.Создание экземпляров с уникальными атрибутами с использованием Factory Girl

Как это сделать правильно, чтобы поле guid всегда уникально?

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

ответ

10

В общем, завод Девушка решает проблему с последовательностями:

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 
+2

+1 причина, по которой ОП сталкивается с проблемой, заключается в том, что код создания направляющего элемента оценивается на время определения Factory, поэтому значение является постоянным для каждого вызова фабрики. Третье из трех возможных решений будет генерировать новый GUID для каждого вызова фабрики, что почти наверняка будет искать OP. –

Смежные вопросы