🐶

enum

2024/06/25に公開

チーム開発の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 %>
:

https://zenn.dev/sudoukky/articles/c3ec62affbdf81

参考にさせていただいた記事。

Discussion