0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

enumの使用方法

Posted at

enumとは?

enum(enumeration: 列挙)は、名前を整数の定数に割り当てるのに使われるデータ型です。(列挙型というみたいです。)

名前は言語の定数として振る舞う識別子なので、整数を直に扱う場合よりもプログラムの読みやすさとメンテナンス性が向上します。

例::publicを0、:draftを1として、0や1で状態を定義できる

使い方

例として、article(記事)というモデルにstatus(状態)というカラムを作成し、それをenumを使って表します。

デフォルトで0(draft)になるように設定してます。

カラム作成

class CreateArticles < ActiveRecord::Migration[6.0]
  def change
    create_table :articles do |t|
      # 他のカラムの定義
      t.integer :status, default: 0

      t.timestamps
    end
  end
end

modelでenumの設定

記事が、下書き中、公開、非公開といった感じで状態分けしてます。

class Article < ApplicationRecord
  enum status: { draft: 0, public: 1, private: 2 }
end

ハッシュ以外にも配列で定義することも可能です。

使用例

# Articleを作成して保存する
article = Article.new(status: :draft)
article.save

# 作成したArticleの状態を確認する
article.status
=> "draft"

# 状態を変更して保存する
article.public!
article.save

# 状態が変更されたことを確認する
article.status
=> "public"

# 番号から状態を取得する
Article.statuses[0]
=> "draft"

Article.statuses[1]
=> "public"

Article.statuses[2]
=> "private"

日本語化することも可能

例えば、config/locales/ja.ymlというファイルを作成し、以下のように定義します。

ja:
  enums:
    article:
      status:
        draft: "下書き"
        public: "公開"
        private: "非公開"

このように定義することで、Articleモデルのstatus列に対して、draftが”下書き”、publicが”公開”、privateが”非公開”という日本語の表現が適用されます。

例えば、以下のようにビューファイルで設定し、@article_statusが:draftの場合、ビューで表示される内容は状態: 下書きのようになります。

<p>
  状態: <%= t("enums.article.status.#{ @article_status }") %>
</p>
0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?