enumとは
enumは列挙型でカラム(列)で文字列を順番に出力していくものです。
そしてそれぞれに数字を割り当てて意味を持たせます。
例えばある処理をして処理の流れを表現できます。
0が「未入力」、1が「入力中」、2が「処理中」、3が「処理済」
というように 処理の流れを表現できます。
⚫︎補足
Rubyにはenumはなくrails 4.1以降から導入されたみたいです。
enumを使うと?
Enumを使うことにより数値で修正が簡単になり、module側で変更するだけで
全体に変更が反映されます。
意味を持った文字を入れて、DB は数字で管理し保存しておくことができます。
そして値を決めることによって不正なアクセスが入らないようにします。
データベースの中身が見れるschema.rbで見てみましょう。
ActiveRecord::Schema.define(version: 2021_01_17_095549) do
create_table “staffs", fcharset: "utf8", force: :cascade do |t|
t.string “name”
t.string “job”
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
これをenumにすると
class Staff < ApplicationRecord
enum name: {
Taro: 0,
Jiro: 1,
Saburo: 2,
Yonro: 3
}
みたいになります。
nameカラム(integer型)の中の4人の名前をそれぞれ紐づけます。
nameカラムにtaroを入れたら0がデータとして入ります。
シンボルと文字列で定義
enumはシンボルと文字列で定義ができます。
class Student < ApplicationRecord
# シンボルで定義
enum school_class: [ :A, :B, :C, :D ]
# 文字列で定義
enum blood_type: [ "A", "B", “C”, “D” ]
end
Rubyの配列と同じで添字と定数が紐付きます。
Student.create(school_class: ‘A’) データベースに0が保存される
Student.create(school_class: ‘B’) データベースに1が保存される
型による使い方
integer,boolean,型による使い方、 確認、検索、更新メソッド
など他にもいろいろな使い方があります。
この資料から確認してみてください。
https://pikawaka.com/rails/enum
⚫︎参考資料
https://pikawaka.com/rails/enum
https://techacademy.jp/magazine/31545
https://web-camp.io/magazine/archives/16862
https://qiita.com/kitsunecat/items/ddc13b95814650c4471e