🐙
[Rails]enumについて
enumとは (概論)
語源は enumeration(列挙)で、
名前を整数の定数に割り当てるために使われるデータ型の一つ。
1つのカラムに、指定した複数個の定数を保存できる様になる。
※migration fileに記述するときのデータ型は、integer型で、
defaultの設定を必ずしましょう。
【数値で管理することのメリット】
- 安全性が高まる(正当性が保証される)
(きめられた数値以外の登録が出来ないようになるから) - データベースに格納する時に、数値型の方がデータサイズが小さくなる
(DBの負担が減る) - コードの可読性向上
-
データの変更が容易になる
データの変更などあった際に、enumを使用してることにより、データベースのスキーマやコードの修正が不要で、
enumの定義だけ変えれば済むようになる。
enumを日本語化させ実装するには: i18nとYAMLfile
enumで定義された属性の値を、日本語で表示するためには、少し設定が必要。
ActiveRecord::Enum の仕組みで簡単に実装自体はできるのだが、
直接数値と日本語を紐づけると、一部使えなくなるメソッドが存在する。
=> i18nを使用する。
● i18n(internationalization)とは
多言語対応を可能にするためのライブラリ。
アプリケーション内のテキストやメッセージを翻訳可能な形式で記述し、
翻訳用のデータベースを管理することにより実現している。
= YAML(ヤムル)ファイルの記述を行うよ!
● YAML(ヤムル)ファイルとは
テキストファイルの一種で、人間が読みやすく、コンピュータが処理しやすいデータの構造化フォーマット。
主に設定ファイルやデータファイルとして使用される。
今回はi18nライブラリを使用していくため、各言語の翻訳データをYAML形式で記述していく。
実装方法
1. gem導入 :enum_help
- enum_help :Railsのenum機能をより使いやすくするためのGem
gem "enum_help"
bundle install
行う。
2. enumの定義 :modelに記述
今回は例として、orderモデルのpayment_method(支払い方法)カラムに
enum使用していく.設定内容は、
- 0 が入っている場合は credit_card(クレジットカード)
- 1 が入ってる場合は transfer(銀行振込)
これに沿って実装していきます。
<order.rb>
enum payment_method: { credit_card: 0, transfer: 1 }
- ここの段階では、英語表記です。(日本語では書きません。)
- ここでの記述の型は、以下に示します。
class モデル名 < ApplicationRecord
enum 属性名: { 値1: 値1の番号, 値2: 値2の番号, ... }
end
3. 日本語対応していく
①config/application.rb に日本語化対応の追記
- 以下のように、
config.i18n.default_locale = :ja
の記述を行う。 - これでRailsのデフォルトの言語が日本語になる。
:
module NaganoCake
class Application < Rails::Application
:
:
config.i18n.default_locale = :ja #ここ!
:
end
end
②ymlファイルを作成
- 上記でも書いたが、作成しここに、翻訳データをYAML形式で記述していく。
- 日本語対応にするため、今回は, config/locales フォルダに ja.yml というファイルを作成.
<記述の基本型>
ja: # 日本語の設定
enums: # enumの設定
[モデル名]:
[カラム名]:
[enumで番号と紐付けた要素]
[enumで番号と紐付けた要素]:# 要素の数だけ追加
では今回の例の内容も、この型に当てはめて作成すると以下のようになる。
ja: # 日本語の設定を行う
enums: # enumの設定を行う
order: # モデル名(Orderモデルに対して)
payment_method: # カラム名(payment_methodカラムに対して)
credit_card: "クレジットカード"
transfer: "銀行振込"
最後はできているか、ターミナルでRails cで見てみよう😀
Discussion