【Rails】「enum」を使って「ステータス管理」を行う方法をまとめてみた!(設定例と手順あり!簡単・初心者向け!)

「Rails」の「enum」を使用して「ステータス管理」を行ってみたいと思います。
今回は例として、ECサイトで商品が注文された後の「注文状況のステータス」を管理します。

モデル名:「order」
カラム名:「order_status」

ステータスの状態
# 注文ステータス(0=支払待ち / 1=支払済み / 2=発送準備中 / 3=発送済み) enum order_status: { waiting: 0, paid_up: 1, preparing: 2, shipped: 3 }

目次

「マイグレーション」

「product」モデルを作成してマイグレーションします。

class CreateOrders < ActiveRecord::Migration[5.2]
  def change
    create_table :orders do |t|
      t.integer :customer_id, null: false
      t.string :postcode, null: false
      t.string :address, null: false
      t.string :reciver_name, null: false
      t.integer :delivery_fee, null: false
      t.integer :total_price, null: false
      t.integer :payment_method, null: false
      t.integer :order_status, null: false, default: 0

      t.timestamps
    end
  end
end



今回の「enum」に利用するのは、

t.integer :order_status, null: false, default: 0

の部分です。

「モデル」に記述

# 注文ステータス(0=支払待ち / 1=支払済み / 2=発送準備中 / 3=発送済み)
enum order_status: {
    waiting: 0,
    paid_up: 1,
    preparing: 2,
    shipped: 3
}

モデルにenumを管理する用のステータスを記述します。

enumの内容を日本語で表示する

現在のままでは、日本語のステータス名で表示できないので、手動で
日本語化させてあげます。


まず、「config/application.rb」に以下の行を書き込みます。

    # 標準 日本語化
    config.i18n.default_locale = :ja

これで、日本語化できるようになります。

次に、「config/locales/ja.yml」に(なければ作成してください。)以下の記述をします。

ja:
  enums:
    order:
      order_status:
        waiting: "支払待ち"
        paid_up: "支払済み"
        preparing: "発送準備中"
        shipped: "発送済み"

これで、手動で日本語化できます!

「ビュー」の記述

あとはビューに書き込むだけです!

<%= form_with(model: @order, url: admins_order_path, local: true, class: "form-row") do |f| %>
    <%= f.select :order_status, Order.order_statuses_i18n.invert, {prompt: false}, class:"form-control form-control-sm col-6"  %>
    <%= f.submit "更新" %>
<% end %>

「order_status」の部分はこちらですね。

<%= f.select :order_status, Order.order_statuses_i18n.invert, {prompt: false}, class:"form-control form-control-sm col-6"  %>

「enum」で表示するときには、
「:order_status, Order.order_statuses_i18n.invert」という書き方をするみたいです。
これで日本語でプルダウン を表示してくれつつ、保存ができます。


私が実際に作った画面はこんな感じです。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次