Arale

アパレル、バリスタを経て未経験からのプログラマーになった男の勉強ログ

deviseで一般ユーザーと管理者とで分ける

管理者(admin)と利用者でユーザーを分ける

自分で1からWebアプリケーションを作成しています。

今回、私が作成したいのはパンの取り置き(予約)サイトです。

トップページにはご予約方法や商品一覧を表示させたいと考えてます。

管理者だけが商品の追加、編集、削除を行いたいと考えてます。

そこで他の一般のユーザーの方にはそうならないように条件分岐する予定です。

が、機能の導入の前にDB設計で躓きました。

ただでさえ、最終理想のWebアプリケーションはER図でのテーブルが非常に多く、乱雑な状態でした。

元々あるusersテーブルにadmin機能だけ追加出来ないか?

と考え、調べに調べました…

deviseでユーザー管理機能を導入し、管理者を設定するにはどうすれば良いのか。

boolean型(カラム)をusersテーブルに追加する

f:id:Arale:20220125105418p:plain

# app/db/migrate 内のuserテーブルの記述
    create_table :users do |t|
      ## Database authenticatable
      t.string :nickname,           null: false
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      t.string :family_name,        null: false
      t.string :first_name,         null: false
      t.string :phonenumber,        null: false
      t.boolean :admin,                          default: false

boolean、初めて出てきた用語です。

直訳すると「真、または、偽」

default: falseはなぜfalseなのかは分かりませんが、

偽で初期設定をしている。と今の私は無理矢理納得しました。

管理者を登録する

# app/db/seeds.rb
User.create!(
  nickname: "*************",
  email: "*************",
  password: "*************",
  password_confirmation: "*************",
  family_name: "*************",
  first_name: "*************",
  phonenumber: "*************",
  admin: true
)

seeds.rbファイルを初めて触りました。

色々調べたけど、テスト環境で使うファイルと端的に認識しました。

そしてここでのadminはtrueとなっています。

さて、ここで記述した情報をusersテーブルに保存したいと思います。

rails db:seed

無事にテーブルに保存されており、ローカル環境でバッチリログインできました。

しかし、このままだと本番環境では機能しないみたいです。

下記を参考にさせていただき、本番は鍵にして動作確認します。

qiita.com

上記のコマンドに出てたコマンドで反映されませんでした。

結論として

heroku run rake db:seed

#heroku上で行うコマンドでないと実行できませんでした。

参考にしたURL

nllllll.com

ccbaxy.xyz

qiita.com

qiita.com