enumを使ってみる
enumとは
ActiveRecordが提供する機能の一種で、列挙型のクラスのことです。
土台となるアプリケーションを作成する
$ rails new enum_test
$ rails g scaffold User name:string role:integer
マイグレーションファイルを修正する
class CreateUsers < ActiveRecord::Migration[5.0] def change create_table :users do |t| t.string :name t.integer :role, default: 0, null: false t.timestamps end end end
$ bin/rails g migrate
modelにenumを定義する
class User < ApplicationRecord enum role: { normal: 0, staff: 1 } end
今回はユーザーにnormalとstaffという2つの権限を設定できるようにします。
ユーザを登録する
$ bin/rails c
でコンソールを立ち上げ、
enum定義したnormalとstaff権限を持つユーザーを1データずつ作成します。
$ User.create(name: 'ノーマルユーザーさん', role: 0)
$ User.create(name: 'スタッフユーザーさん', role: 1)
$ User.all
でデータの中身を確認してみる
enumのメソッドを使ってみる
先ほど作成したノーマルスタッフさんを取り出して、enumのメソッドを検証していきます。
# usersテーブルからノーマルユーザーさんを取り出します user = User.find(1) # ユーザーのロールを確認します。(1ではなく、定義したキー値が返却されます) user.role => "normal" # userがnormalであるかどうかを、真偽値で返却します。 user.normal? => true # userがstaffであるかどうかを、真偽値で返却します。 user.staff? => false # userをnormalからstaffへ変更します。 user.staff! => UPDATE "users" SET "role" = ?, "updated_at" = ? WHERE "users"."id" = ? [["role", 1], ["updated_at", "2017-07-05 11:32:34.172870"], ["id", 1] # userがstaffに変更されているか確認します。 user.role => "staff"
このようにenumを使うことでデータ数を固定できたり、
コードの可読性を向上させることができます。