2 flat logo on transparent 256
2018-03-11

ユーザーのフラグ管理に使えるRuby On Railsのenumを紹介

15hjky56s

プログラミング言語に関わらず、データベースを利用すると社内管理用のフラグを設定する場合が多いと思います。

例えばユーザーテーブルだと、未会員登録・会員・退会者などの情報をフラグとして持ちたいという事があります。

Ruby On Railsではそういったユーザー管理などのフラグ管理に使えるActiveRecordのAPI enumが用意されているので、今回はこのenumについて解説します。

enum用のカラムを追加

enumはDBカラムのinteger(数値)型かboolean型のどちらかに設定できます。今回は新規でenum用のカラムを追加します。

class AddStatusToUsers < ActiveRecord::Migration
  def change
   #デフォルト値はなるべく設定する事をお勧めします。
    add_column :users, :status, :integer, default: 0
    add_column :users, :mail_flag, :boolean, default: false
  end
end

Modelへ定義する

基本構文は下記の通りenumとして設定したいカラムを指定して、フラグの内容を定義します。

class User < ActiveRecord::Base
  enum status: { unregistered: 0, registered: 1, withdrawal: 2  }
  enum mail_flag: { non_consent: false, consent: true }
end

使い方例

UserControllerで設定した場合の例を記載します。

※簡易的に説明する為、一部簡略化しています。

class User < ActiveRecord::Base
  def index
     #unregisteredのフラグが立っているデータを取得
    @users = User.unregistered
  end

  def create
    @article = User.new(hoge_params)
     if @article.save
        # enumのフラグ+?でtrue false判定が可能
       if @article.non_consent?
           redirect_to root_path
       elsif @article.withdrawal?
           redirect_to new_path
       else   
           redirect_to hoge_path
       end
     else
      render 'new'
     end
  end
end

なお利用シーンはあくまで管理用、社内用途での利用となります。その為登録フォームでユーザーが自ら選択する項目などには あまり利用しません

関連記事

Ruby On Rails でデータを取得するメソッド一覧

Ruby On RailsのscopeメソッドでSQLを効率化する

【初心者・独学者向け】Ruby On RailsでテーブルやModelを削除する際のコマンド

【初心者・独学者向け】Ruby On Railsで中間テーブルを作成し、多対多を実現する

前の記事
次の記事