Railsのenumerizeメソッドの使い方
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
⚫︎補足
ポリモーフィックについては、以下の記事を確認してください。
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}") %>
資料
ChatGpt
Discussion