プログラミングガール

Developing a better me

Rails|FactoryGirlでユニークな値を指定したいとき

背景とやりたいこと

ユニーク制約を付与したため、create_list で一度にテストデータを作成しようとした場合、値が重複しているとお叱りを受けた。
ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry

修正前

user_name はユニークな値になるように登録させたい。
↓では重複になってしまった。

FactoryGirl.define do
  factory :user do
    name "My Name"
    user_name SecureRandom.hex(6)
    age 20
  end
end

修正後

ラムダにすればユニークな値で登録される。

FactoryGirl.define do
  factory :user do
    name "My Name"
    user_name { SecureRandom.hex(6) }
    age 20
  end
end

参考URL

ruby on rails - Use a factory's sequence to generate unique phone numbers - Stack Overflow