👌

Railsのenumerizeメソッドの使い方

2024/03/06に公開

enumerizeメソッド

ActiveRecordモデルで列挙型(Enum)を扱うためのgemです。
enumerizeメソッドを使うと、データベースの列(カラム)に対して、特定の値のセットを定義する方法で、その列が取りうる値を事前に指定して、コード内でそれらの値を参照することができます。

小学生にもわかるように説明

enumerizeメソッドは、色んなものを整理して分類するお助け機能みたいなものです。

ex)
動物園のシステムでenumerizeメソッドを使って、動物の状態を管理するとします。
状態は「眠っている」「起きている」「食べている」などがあります。
enumerizeメソッドを使うと、これらの状態をコンピュータが理解しやすい形に変換できます。
例えば、「眠っている」を「sleeping(眠っている)」、「起きている」を「awake(起きている)」というように、
それぞれの状態にわかりやすい名前を付けることができるんです。

こうして動物園のシステムで動物の状態を管理する際に混乱することなく、スムーズに作業を進めることができます。

使い方

実際にどんな感じで使うのか見ていきます。
まずはGemfileに以下のように追記してbundle installします。

gem 'enumerize'

ここでは、とある講座(lessonモデル)を例に出していきます。

class Lesson < ApplicationRecord
  belongs_to :student
  belongs_to :school

  belongs_to :lesson_plan, polymorphic: true

  extend Enumerize
  enumerize :status, in: %w[unused used disable]
end

⚫︎補足
ポリモーフィックについては、以下の記事を確認してください。

https://zenn.dev/norihashimo/articles/1768576abdd6b6

enumerize メソッドの基本的な使い方は以下の通りです。

# show_service.rb
class ShowService
#中略
  def lesson_number_per_school
    @data[:lesson_number_per_school] = @student.lessons.includes(:school).group_by(&:school).map do |school, lessons|
      {
        school_name: school.name,
        number_of_unused_lessons: lessons.count { |lesson| lesson.status == 'unused' }, # 未受講レッスンの数を数える
        total_lessons: lessons.size
      }
    end
  end
end

ここで、unusedを使うことで、未受講のレッスン数が表示されます。

もし未受講と表示させる場合はconfig/locales/ja.yml
に記載するとできます。

ja:
  enums:
    lesson:
      status:
        unused: "未受講"
        used: "使用済み"
        disable: "無効"

ex)
ビューでレッスンの状態を表示する部分がある場合、以下のようにI18n.tメソッドを使用してローカライズします。

<%= I18n.t("enums.lesson.status.#{lesson.status}") %>

資料

https://zenn.dev/mgmmy/articles/163caf57df2a2a

ChatGpt

Discussion