それぞれが一意になるように、guidフィールドに制約と検証を配置しています。問題は、以下に示すファクトリ定義では、追加のインスタンスが検証に失敗するため、1つのユーザーインスタンスしか作成できないことです。
GUIDフィールドが常に一意になるように、これを正しく行うにはどうすればよいですか?
Factory.define(:user) do |u|
u.guid UUIDTools::UUID.timestamp_create.to_s
end
それぞれが一意になるように、guidフィールドに制約と検証を配置しています。問題は、以下に示すファクトリ定義では、追加のインスタンスが検証に失敗するため、1つのユーザーインスタンスしか作成できないことです。
GUIDフィールドが常に一意になるように、これを正しく行うにはどうすればよいですか?
Factory.define(:user) do |u|
u.guid UUIDTools::UUID.timestamp_create.to_s
end
一般的に、FactoryGirlはシーケンスの問題に対処します。
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