after_createを用いたfactory_girlを実行した際、以下のようなエラーが発生しました。
ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry '1-1' for key 'uniq_categories': INSERT INTO `categories`
idの部分でuniqではないというエラーかと思い、一度、DBをすべてリセットし、何もデータが入っていない状態で、もう一度、factory_girlを実行しました
FactoryGirl.create :user
しかし同じエラーが起こりました。
今回のようなケースではidの部分でuniqだと思うのですが、原因がわからず困っております。
どなたかアドバイスいただけないでしょうか?
uniq_categoriesとしたmigration部分
add_index :categories, [:campaign_id, :user_id], unique: true, name: 'uniq_categories'
factory_girl
以下のファクトリーがあり、after_createを使わず、単体で実行すると、
データの作成に成功します。
リレーションを用いた、データ作成をしたいため、今回、after_createを用いたデータ作成に挑みました。
factory :user
factory :campagin
factory :category
※factory :campagin と factory :category のファイル内ではafter_createなどはしてません。
FactoryGirl.define do factory :user do after(:create) do |user| user.campaigns = create_list(:campaign, 1, user_id: user.user.id) user.categories = create_list(:category, 1, user_id: user.id, campaign_id: user.campaigns[0].id) end end end
モデルのリレーション
class User has_many :cammpaigns has_many :categories end class Category belongs_to :user belongs_to :campaign end class Campaign has_many :categories end
あなたの回答
tips
プレビュー