🔢

【Rails】enum

2023/07/31に公開

enumとは

enum(列挙型)は、データベースの列に対して特定の値のセットを関連付ける機能。例えば、商品の状態を表す列に「販売中」「売り切れ」「予約受付中」という値を設定できるため、データベースに意図しない値を入れるミスを防ぎ、わかりやすい情報を保存できる。

enumの例

モデルでenumを定義することで、そのモデルが持つ特定の列に対して、あらかじめ定義した値のセットを設定する。例えば、以下のようにenumを使って商品の状態を定義する。

item.rb
class Item < ApplicationRecord
  enum status: { on_sale: 0, sold_out: 1, reservation: 2 }
end

このようにenumを定義すると、Itemモデルのstatus列は特定の値のみを持つことができるようになる。

enum_helpとは

enum_helpは、enumの値をわかりやすいラベル(表示名)として扱うためのGemのこと。enumで定義した値に対して、日本語や任意の文字列などのラベルを紐付けることができる!
データベースに保存される値は数値のままで、ビュー(View)やコントローラ(Controller)内でenumのラベルを使うことができる。

enum_helpの導入

Gemfileに記載しbundle installをする。

Gemfile
gem 'enum_help'

日本語化するための方法

railsアプリケーションを日本語対応するには、国際化(i18n)という仕組みを使う。

i18nとは

i18n(Internationalizationの略)は、国際化をサポートするための仕組で、プログラムやアプリケーションを複数の言語や地域に対応させることができる。例えば、あるウェブサイトが日本語と英語の2つの言語に対応していると、ユーザーがウェブサイトにアクセスする際に、そのユーザーのブラウザの言語設定に応じて自動的に言語が選ばれ表示される。

多言語対応のための設定ファイルは以下の2つ。

  1. config/locales/*.yml
    各言語ごとのテキストを格納したYAML形式のファイル。例えば、ja.ymlは日本語のテキストを、en.ymlは英語のテキストを管理する。

  2. config/application.rb
    アプリケーション全体で使用するデフォルトの言語やi18nの設定を行うファイル。

application.rbの記述

以下ファイルに追記する。

config/application.rb
:
:
module NaganoCake
  class Application < Rails::Application  
  :
  :
  config.i18n.default_locale = :ja
  :
  :
  end
end

この記述により、railsのデフォルト言語が日本語になる。

ymlファイル作成

config/localesフォルダにja.jml(日本語のテキスト)ファイルを作成し、以下のように記述する。

config/locales/ja.yml
 ja:
  enums:
    item:
      status:
        on_sale: 販売中
        sold_out: 売り切れ
        reservation: 予約受付中

上述のように定義することで、例えば以下のようにenumの日本語ラベルを使って条件分岐を行うことができる。

if item.status == '販売中'
  # 販売中の処理
elsif item.status == '売り切れ'
  # 売り切れの処理
else
  # 予約受付中の処理
end

また、ビュー(View)でenumの日本語ラベルを表示できるようになる。
例えば、商品一覧ページで商品の状態を表示する場合には、以下のようにenumの日本語ラベルを取得して表示する。

view
<%= item.status_i18n %>

まとめ

  • enumは数値に意味を持たせることができる。
  • 日本語化するには、i18で国際化しymlファイルに記述する。

Discussion