0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails8でEnumを使う/日本語化の方法を追記

Last updated at Posted at 2025-02-13

はじめに

Rails8でEnumを使う際に、少し詰まったので備忘録としてのこしておきます。
Rails8から7まで非推奨で使えていたEnumの定義方法が使用禁止となったようです。
また、日本語化の方法も検索して出てきた記事で上手く解決できなかったので、残しておきます。

バージョン情報

  • Rails8
  • Ryby3.4

やりたいこと

  • enumを定義したい
  • enumの英語表記を日本語化したい

enumを定義したい

やったこと

  • モデルファイルに以下を記述
    enum gender: [ :male, :female, :non_binary ] 
    
  • コンソールで確認
    • Profile.genders

エラー内容

 wrong number of arguments (given 0, expected 1..2) (ArgumentError)

原因

  • Rials8ではキーワード引数を使用した列挙型が使用禁止になっている

解決策

  • 位置引数を使用する

      enum :gender, [ :male, :female, :non_binary ]
    

enumの英語表記を日本語化したい

やりたいこと

  • 以下のようにenumで定義した単語を日本語化したい

      enum :gender, [ :male, :female, :non_binary ]
    

やり方

前提

  • 上記のgenderはプロフィールページとプロフィール更新用のフォームで使用

I18nの設定

  • Railsプロジェクトを日本語化する

    # config/application.rb
    module Myapp
      class Application < Rails::Application
        config.i18n.default_locale = :ja  # 追加
        config.i18n.load_path += Dir[Rails.root.join("config", "locales", "**", "*.{rb,yml}").to_s]  # 追加
      end
    end
    
    
  • config/locales配下にymlファイルを作成

    # config/locales/enum.yml
    ja:    # おそらくここを見て、訳文を読み込み
      enum:
        genders:
          male: '男性'
          female: '女性'
          non_binary: 'ノンバイナリー'
    
    • デフォルトロケールを:jaにした場合、ymlファイルのトップに:jaがあるファイルの訳文を読み込む

使い方

  • I18n.t メソッドを使用してymlファイルから訳文を読み込む

    I18n.t("enum.genders.male") # => '男性' と表示される
    I18n.t("enum.genders.female") # => '女性' と表示される
    I18n.t("enum.genders.non_binary") # => 'ノンバイナリー' と表示される
    
    • :ja 以下のymlファイルの記述をメソッドチェーンのように記述することで訳文にアクセスできる
  • Viewでの使い方

    %p= I18n.t("enum.genders.#{current_user.display_gender}") # => ログインユーザーの`gender`
    
  • SELECTフォームでの使い方

    = f.select :gender, Profile.genders.map { |k, v| [I18n.t("enum.genders.#{k}"), k]}, {}, class: 'text'
    
    • form_withのselectメソッドは、第2引数に配列を渡すと[ [ '表示名1', 'Value1' ], [ '表示名2', 'Value2' ] ] として使用可能
    • Profile.genders{"male" => 0, "female" => 1, "non_binary" => 2}というハッシュ
    • Profile.genders をmapで [["男性", "male"], ["女性", "female"], ["ノンバイナリー", "non_binary"]] にする必要がある

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?