0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

`devise`を後から追加してみた

Last updated at Posted at 2024-10-18

概要

  • 既にテーブル users を作成していたため後から devise を導入する形で作業を進行しました
  • 最初から作成する場合の記事が多かったですが既存の場合はどうなるのか気になったため実行

【結論】後から導入する場合にも問題ない

  • 既存のテーブルを削除して作り直す必要もない

実際に行った手順

  • 当然ではありますが公式の手順書を確認しながら作業を進行しました
bundle add devise
rails generate devise:install

肝心の既存のテーブルに関わってくる箇所

  • ここでモデル名を指定するコマンドが登場します
rails generate devise MODEL

 

  • 私の場合は既存の User モデルに devise の認証を追加したかったので次のようにしました
rails generate devise User

結果として以下のようになりました
image.png

  • 既存のモデルに対して追記がされるため問題なく導入できました

ところが rails db:migrate で詰まった

  • この後生成されたマイグレーションファイルを rails db:migrate したところでエラーとなった
実際に表示されたエラー
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email" DETAIL: Key (email)=() already exists.

確認した事・試したこと

  • email というカラムが原因なのかと思いスキーマを確認した
    • そもそも既存のテーブルには email のカラムを作成していないので関係が無いと判断
  • データベースを作り直したら直ったという旨が確認できたので rails db:reset を実行
    • しかし同じエラーが表示される

解決策

  • なぜこれで解決できるのかが全く分かっていないため今後の課題とする
  • こちらにある通り、tests/fixtures/users.yml を編集したら、エラー無く rails db:migrate を実行できた

以下、私の場合を示す

  • onetwoにそれぞれ値の異なる email カラムを追加した
tests/fixtures/users.yml
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
  user_uid: MyString
  email: alice@example.com
  profile_image: MyString
  name: MyString
  gender: 1
  age: 1
  introduction: MyText

two:
  user_uid: MyString
  email: bob@example.com
  profile_image: MyString
  name: MyString
  gender: 1
  age: 1
  introduction: MyText

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?