🐶
enum
チーム開発のECサイト作成。
製作ステータス/注文ステータスで使ったenumの復習。
enum
数値に意味を持たせることができる。
この記述はモデルに記載して、呼び出せるようにする。
*着手不可 → 1
*製作不可 → 2
*製作中 → 3
*製作完了 → 4
enumのメリット
* 決められた数値のもの以外の登録ができないようになるため、安全性が高まる。
* 支払い方法の選択用のテーブルを作成する必要がなくなる。
らしい。
enum_helpを導入
enumを使うには、[enum_help]を使う。
これを使うと。Viewで扱えるようになる。
Gemfileの一番下に記述する。
Gemfile
:
gem "enum_help"
enumの定義をモデルに記述する。
製作ステータスは、[order_detail.rb]
注文ステータスは、[order.rb]へ。
order_detail.rb
:
enum making_status: { making_unable: 0, waiting_for_making: 1, in_making: 2, making_completed: 3 }
※上記で言った通り、ここには、英語で記述する。
日本語にする
日本語対応させるために、国際化(i18n)を使う。
config/application.rb
:
config.i18n.default_locale = :ja
:
end
デフォルトの言語が日本語になる。
[ja.yml]ファイルを元に、日本語化が行われるようになる。
ja.ymlファイル作成する
config/localesフォルダに作成する。
config/locales/ja.yml
ja: # 日本語の設定を行う。これはファイルに一番上に記述したら、これ以降は記載必要なし。
enums: # enumの設定を行う。これも一度記述したら、これ以降必要なし。
[モデル名]:
[カラム名]:
[enumで番号と紐付けた要素]:# 要素の数だけ追加
config/locales/ja.yml
ja:
enums:
order_detail:
making_status:
making_unable: "着手不可"
waiting_for_making: "製作不可"
in_making: "製作中"
making_completed: "製作完了"
* 階級ごとの記述になるから、
order_detailに別のenumも表示する場合には、カラム名だけ追加して、同じように記述すれば、
同じorder_detailの階級に適応されるようになる。
* Viewに適応されるように設定はできたけど、国際化(i18n)をどれに適応させるかを伝えるために、
Viewページ記述した内容に、_i18nをつけること。
これしないと、モデルに定義した英文で表示されてしまう。
使い方の例
管理者側の注文履歴一覧に、注文ステータスの表示。
views/admin/homes/top.html.erb
:
<%= order.order_status_i18n %>
:
参考にさせていただいた記事。
Discussion