プログラミング勉強中!!

TECH::EXPERT 40期 受講生の筆者がその日学んだことをアウトプットしていくブログです。学習量によっては全て書ききれないこともあります。お気付きのことありましたバシバシコメントください!!3月中旬よりWEBエンジニアとして働くことになりました。日々の業務などについても発信させていただきたいと思います!!よろしくお願いいたします!!

ユーザ管理機能の作り方 (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]と言う指定の仕方をしていますね。

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

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

それでは。