初めに
こんばんは、だいごです。
今回は、自身が作成中のオリジナルアプリに用いたdeviseの管理者機能についてまとめます。
よかったらご覧ください。
実装の手順
初めに、deviseを導入していきます。
この手順に関しては、省略しますが、気になる方はこちらの記事を参考にしてください。
ここからは、管理者機能を実装していきます。
まずは既存のusersテーブルにデータ型がboolaen型のadminカラムを追加するためにmigrationファイルを作成します。
% rails g migration add_admin_to_users admin:boolean
※boolean型:真理値の「真 = true」と「偽 = false」という2値をとるデータ型
続いて作成したマイグレーションファイルを編集していきます。
以下のように記述します。
class AddAdminToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :admin, :boolean, default: false
end
end
この記述でのポイントは、default: false
の部分です。
この記述があることで、ユーザーを追加する際、初期値としてadminカラムにはfalseを追加することができます。
マイグレーションファイルの変更後は、以下のコマンドで変更を反映させます。
% rails db:migrate
続いて、管理者の登録を行います。
この登録に関しては、seed.rb
ファイルを編集する方法とターミナル操作の方法がありますが、今回はターミナルで操作していきます。
事前に登録したユーザーを管理者に変更していきます。
% rails c
[1] pry(main)> user = User.find(1)
[2] pry(main)> user.admin = true
[3] pry(main)> user.save
これで、管理者の登録が完了しました。
あとは、ビューにおいて管理者とそうでない場合で条件分岐をしてあげれば実装完了です。
今回は、こんな条件分岐を作成しました。
<%# 省略 %>
<% if user_signed_in? %>
<% if current_user == @user || current_user.admin? %>
<div class='edit-btn'>
<%= link_to 'Edit', edit_user_path(@user), class: "edit" %>
</div>
<% end %>
<% end %>
現在のユーザーがマイページのユーザーである時と管理者の場合のみEditボタンが出るようにしました。
終わりに
今回は初心者の自分でもできる方法で管理者機能を実装しました。
他にもコントローラーを分ける方法やGemもあるようなので、機会があればやってみようと思います。
ご指摘・コメントお待ちしております。
ありがとうございしました。