プログラミング学習

【Rails Tutorial】ActiveRecord::RecordNotUnique:と出た時の対処法

どうも、なか(@nakafreelog)です。

Railsチュートリルの7章をやっていたら、ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: column email is not uniqueというエラーに遭遇したので、対処法を記しておきたいと思います。

同じようなエラーで悩んでいた方はぜひ参考にしていただければと。

では、記事に入っていきます(‘ω’)ノ

ActiveRecord::RecordNotUnique:のエラー文を読み解く

ActiveRecord::RecordNotUnique:とは、「ユニーク(一意制約)がされているテーブルにも関わらず重複が起きている」という意味です。

今回の場合は、emailのカラムに一意制約があるのに重複が起きているのが原因ですね。

ActiveRecord::RecordNotUnique:の対処法

僕の場合は、test/fixturesのusers.ymlが以下のようになっていたのが原因でした。

# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
name: MyString
email: MyString

two:
name: MyString
email: MyString

fixturesとは、Railsドキュメントより引用する以下の通り。

事前に用意したテストデータを読み込み、常にDBの内容を一定に保つための仕組みのことを、フィクスチャと呼ぶ

重複したデータを読み込んではいけないemailにoneでもtwoでも同じデータを読み込んだのがアウトだったようです。

users.ymlを書き換えて、emailに読み込ませるデータの名前を重複しないようにしたり、two以下をコメントアウトすると治りました。

というわけで、おわり。

RELATED POST