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時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。