ユーザーの権限を管理する際などに、enumを使うことがあると思います。
今回はenumの使い方をまとめてみます。
下準備
1. Gemをインストールする
日本語対応のためのGemです。
gem "enum_help"
2. モデルを作る
$ rails g model user
202401001000000_users.rb
class CreateUsers < ActiveRecord::Migration[7.1] def change create_table :users do |t| t.string :name t.integer :role, default: 1 t.timestamps end end end
app/models/user.rb
general
を通常ユーザーに admin
を管理者とします。
配列で指定する方法もありますが、本番運用が始まってからロールが増えたり減ったりした時にデータの整合性を保つのが難しくなるので、以下のようにハッシュで指定する方法がおすすめです。
class User < ApplicationRecord enum role: { general: 1, admin: 2 } end
使ってみる
1. 保存する
user = User.create(role: 1) user.role # => "general"
数値で指定する以外にも、先ほど設定したキーで指定することもできます。
admin = User.create(role: "admin") admin.role # => "admin"
2. スコープ
enumを設定すると、スコープが使用できるようになります。
通常ユーザーの一覧を取得する
User.general
通常ユーザー以外の一覧を取得する
User.not_general
3. 日本語対応
冒頭でインストールした enum_help
を使って日本語対応もできます。
config/locales/enums/ja.yml
ja: enums: user: role: general: 通常ユーザー admin: 管理者
user = User.first user.role_i18n # => 通常ユーザー
4. セレクトボックスで使う
日本語対応を応用して、セレクトボックスで使用するハッシュを作成することができます。
~~省略~~ <%= f.select :role, User.roles_i18n.invert %> ~~省略~~
終わり
Gemを使用すれば日本語化も簡単に使うことができてとても便利ですね!