【Rails6】enumを編集画面とビュー側で日本語表記にする方法

Gemを導入

gemfileに以下を追加

gem 'rails-i18n'
gem 'enum_help'

追加したら$ bundle install です。

config/application.rbを編集

以下を追加します。

class Application < Rails::Application
  config.load_defaults 6.1
  config.time_zone = 'Tokyo'
  config.i18n.default_locale = :ja
  config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.yml').to_s]
end

モデル(今回はfeedbackモデル)にenumを記載

feedback.rb に以下を追加。

ちなみに、今回は、Feedbackテーブルstatusカラム(integer型)の前提です。

それから、マイグレーション生成時にstatusカラムにnull: false, default: 1 も追加しています。

class Feedback < ApplicationRecord
  enum status: { waiting: 1, finished: 2 }
end

config/locales/ja.ymlを作成、編集

config/locales配下にja.ymlを作成。

ja:
  enums:
    feedback:
      status:
        waiting: 確認中
        finished: 改善済み

フォームで日本語表示

以下の様に記述します。

カラム名複数形_i18n.invert がポイントです。

<%= f.label :status, 'ステータス' %>
<%= f.select :status, Feedback.statuses_i18n.invert %>

viewで日本語表示

_i18nを日本語表記にしたいカラムの後に追加。

<td><%= feedback.status_i18n %></td>

これで完了です。

他にもこんな記事があります!