ユーザ管理機能の作り方 (admin)

はい、こんにちは

現在作成中のアプリに管理者権限を追加いたしましたので、アウトプットいたします。

ユーザ管理機能とは

アプリのユーザーを登録したり、削除したりなんでもできる権限を与えること

手順

①userモデルに、adminフラグを追加する。

まず、ユーザが管理者かどうかを表すフラグを追加します。

ターミナル/アプリ名$ bin/rails g migration add_column_to_users

実行結果
f:id:g1034725:20190118155927p:plain

作成されたマイグレーションファイルを下記のように変更する。

db/migrate/xxxx_add_column_to_users
def change
add_column :users, :admin, boolean, default: false, null: false
end

保存後にマイグレートする。

ターミナル/アプリ名$ bin/rails db:migrate

f:id:g1034725:20190118160613p:plain

ユーザ管理のためのコントローラを実装する

ターミナル/アプリ名$ bin/rails g controller Admin::Users index new show edit

Admin::とつけることで、/app/controller/admin/users_controllerと自動的にadmin/users_controllerのように階層化してくれる。

また、Admin::Usersの後にindex new show editとすることで、routingも自動生成してくれる。(viewファイルも)

f:id:g1034725:20190118161420p:plain

routingを修正する。

get ‘index#users’と言う形式になっているので、resourcesに変更する。

namespace :admin do
resources :users   #ここのみ変更する。
end

コントローラの記述

app/controller/admin/users_controller.rb
def index
@users = User.all
end
def new
@user = User.new
end
def create
@user = Use.new(user_params)
if user.save
redirect_to admin_users_path, notice: "ユーザー「#{@user.name}」を登録しました"
else
render :new
end
end

上記のような感じで記述していく。

ビューの記述

比較してみてみる。

通常のユーザの記述(@taskを作成)

app/views/tasks/new.html.slim
= form_with model: @task, local: true do |f|
.form-group
= f.label :name
= f.text_field :name,

adminユーザの記述(adminユーザを作成)

app/views/admin/users
= form_with model: [:admin, @user], local: true do |f|
.form-group
= f.label :name, '名前'
= f.text_field :name

modelの指定の仕方に違いがあります。adminでのユーザ作成なので[:admin, @user]と言う指定の仕方をしていますね。

もしチャレンジされる方はここら辺の記述に気をつけていただければと思います。

もし何かありましたらコメントお願いいたします!!

それでは。

コメント

タイトルとURLをコピーしました