40
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails】enumとは?メリット、使い方、カラムの追加方法について

Last updated at Posted at 2019-01-22

enum(列挙型)とは?

読み方は「イーナム」。
DBにんはint型やboolen型で保存をし、使うときに文字列として使うことができる型。
model上で数値と文字列を定義すると、数字と対応した文字列を取り出すことができる。

どういうときに使用するか?

あるインスタンス(@user@item)において、その状態を管理したいとき。
たとえば、あるユーザーが入金前、入金確認中、入金完了など状態の変化をするとき。
入金前を0、入金前を1、入金前を2とすることで、表現することができる。

enum型を使用するメリットは?

  • 数字として管理することで、 静的なオブジェクトとして扱うことができ、安全性を高めることができる。
  • 状態を管理するとき、メソッドを使うことができる。
  • 文字列が変わったとしても数字で管理しているので、改修が簡単になる。

デメリット

  • mysql側から見ると数値で保存されてしまうため、マジックナンバーが増える

マジックナンバーとは?

0が未処理、1が処理中、2が処理済みだったとして、ある数字が意味を持つ(1は数字ではなく未処中という意味)

実際にコードを見る

model/item.rb

class Item < ApplicationRecord
  enum l_category_id: [['---',""], ['レディース', 1], ['メンズ', 2],['ベビー・キッズ', 3]]
end

new.html.erb

= f.select :l_category_id, Item.l_category_ids.keys, {}, class: "select-default"

コンパイルされたhtml

<select class="select-default" name="item[l_category_id]" id="item_l_category_id"><option>---</option>
<option value="レディース">レディース</option>
<option value="メンズ">メンズ</option>
<option value="ベビー・キッズ">ベビー・キッズ</option>

dbはint型としてカラムに保存する

class AddStatusToItems < ActiveRecord::Migration[5.0]
  def change
    add_column :items, :status, :integer, null:false
  end
end

40
49
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
40
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?