Railsアプリでenumでユーザー属性別にログイン後のページ遷移を振り分ける

Rialsアプリケーションでユーザーの属性をenumを使って管理し、ユーザー属性にもとづいてログイン後のページ遷移を振り分ける機能を実装します。

user_typeカラムを追加

Userモデルにuser_typeカラムを作成し、enumにします。

enumという型はないので、integerとして設定します。

class AddUserTypeToUsers < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :user_type, :integer, default: 0, null: false, limit: 1
  end
end

モデルでenumの定義をする

Userモデルでenumの定義をします。今回は0のときはuser(一般ユーザー)で、1のときはadmin(管理者)とします。

class User < ApplicationRecord

  enum user_type: 
  {
    user: 0,
    admin: 1
  }
end

ログインで遷移先を振り分ける

user_sessions_controllerなどのログインのアクションです。user_typeがadminかuserかでredirect_toの先を振り分けています。

    def create
        if (@user = login(params[:email], params[:password])) && @user.user_type == "admin"
            redirect_to admin_dashboards_path
        elsif (@user = login(params[:email], params[:password])) && @user.user_type == "user"
            redirect_to root_path
        else
            render :new
        end
    end

enumに使えるメソッド

enumで使えるメソッド例を上げておきます。

user = User.new

user.user_type # "admin" or "user"

user.admin? #userがadminならtrue

user.admin! #userのuser_typeをadminに設定

ウェブサービスで管理者機能を作るときなどはこの実装でいけますね。

参考:いまさらながらRails4.1から導入されたEnumが便利なのでまとめてみた

Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする