【Rails】seedデータ作成後に、新規作成(newアクション)をするとエラー

Ruby on Railsアイキャッチ画像

seedデータを投入した後に、新規作成をすると以下のようなエラーが発生する。

ActiveRecord::RecordNotUnique at /products/1/product_documents
PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "product_documents_pkey"
DETAIL:  Key (id)=(5) already exists.

エラーの原因

seedデータでidを指定していたことが原因

実際のコードがこちら

2.times do |n|
  ProductDocument.create!(id: n,
                          user_id: 8,
                          product_id: n + 1,
                          name: 'name',
                          content: 'content',

end

3.times do |n|
  ProductDocument.create!(id: n + 2,
                          user_id: 9,
                          product_id: n + 3,
                          name: 'name',
                          content: 'content',
end

上記のように、ProductCocumentに対し2回に分けてデータを作る場合、2回目ではidがバッティングしてしまうと思ったため、idをid: n+2のように指定したがこれがエラーの発生源だった。

このid指定を消すと、、そもそもこんなふうにidを指定しなくてもidは連番で付番されたし、エラーも解消された!!

解決方法

それでもidを指定したいという場合は、rails cでコンソールを立ち上げ、以下のQiitaのようにすることで解消する!

PG::UniqueViolation: ERROR: duplicate key value violates unique constraintエラーの解決 - Qiita
PGデータベースにデータをインポートの後など、このエラーが発生する場合があります。PG::UniqueViolation: ERROR: duplicate key value violates …

コメント