【Rails】enum
enumとは
enum(列挙型)は、データベースの列に対して特定の値のセットを関連付ける機能。例えば、商品の状態を表す列に「販売中」「売り切れ」「予約受付中」という値を設定できるため、データベースに意図しない値を入れるミスを防ぎ、わかりやすい情報を保存できる。
enumの例
モデルでenumを定義することで、そのモデルが持つ特定の列に対して、あらかじめ定義した値のセットを設定する。例えば、以下のようにenumを使って商品の状態を定義する。
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をする。
gem 'enum_help'
日本語化するための方法
railsアプリケーションを日本語対応するには、国際化(i18n)という仕組みを使う。
i18nとは
i18n(Internationalizationの略)は、国際化をサポートするための仕組で、プログラムやアプリケーションを複数の言語や地域に対応させることができる。例えば、あるウェブサイトが日本語と英語の2つの言語に対応していると、ユーザーがウェブサイトにアクセスする際に、そのユーザーのブラウザの言語設定に応じて自動的に言語が選ばれ表示される。
多言語対応のための設定ファイルは以下の2つ。
-
config/locales/*.yml
各言語ごとのテキストを格納したYAML形式のファイル。例えば、ja.ymlは日本語のテキストを、en.ymlは英語のテキストを管理する。 -
config/application.rb
アプリケーション全体で使用するデフォルトの言語やi18nの設定を行うファイル。
application.rbの記述
以下ファイルに追記する。
:
:
module NaganoCake
class Application < Rails::Application
:
:
config.i18n.default_locale = :ja
:
:
end
end
この記述により、railsのデフォルト言語が日本語になる。
ymlファイル作成
config/localesフォルダにja.jml(日本語のテキスト)ファイルを作成し、以下のように記述する。
ja:
enums:
item:
status:
on_sale: 販売中
sold_out: 売り切れ
reservation: 予約受付中
上述のように定義することで、例えば以下のようにenumの日本語ラベルを使って条件分岐を行うことができる。
if item.status == '販売中'
# 販売中の処理
elsif item.status == '売り切れ'
# 売り切れの処理
else
# 予約受付中の処理
end
また、ビュー(View)でenumの日本語ラベルを表示できるようになる。
例えば、商品一覧ページで商品の状態を表示する場合には、以下のようにenumの日本語ラベルを取得して表示する。
<%= item.status_i18n %>
まとめ
- enumは数値に意味を持たせることができる。
- 日本語化するには、i18で国際化しymlファイルに記述する。
Discussion