もふもふ技術部

IT技術系mofmofメディア

【日本語対応あり】Railsでenumを使う

ユーザーの権限を管理する際などに、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を使用すれば日本語化も簡単に使うことができてとても便利ですね!