はじめに
enumを使うときに、エラーが出てしまい、すぐに解決できなかったので
使い方と実際に出たエラーをまとめます。
enumを使うことで
・レコードが取り出しやすくなるので、開発をしやすくする
・他のプログラマーにも読みやすくできる
・誤った数値を使うことを事前に防ぐことができる
などのメリットがあります
enumを使用するカラムを用意
shiftsテーブルにstatusカラムを追加していきます。
このstatusカラムがenumを使用するカラムです。
statusカラムは今回、integer型にします。
string型でも可能です。
モデルを作成する場合
ターミナル
$ rails g model Shift status:integer
db/migrate/yyyymmddhhmmss_create_shifts.rb
class CreateShifts < ActiveRecord::Migration[6.1]
def change
create_table :shifts do |t|
t.integer :status, default: 0
t.timestamps
end
end
end
カラムを追加する場合
ターミナル
$ rails g migrate add_column_to_shifts
db/migrate/yyyymmddhhmmss_add_column_to_shifts.rb
class CreateShifts < ActiveRecord::Migration[6.1]
def change
add_column :shifts, :status, :integer, default: 0
end
end
これで、enumを使用するカラムの用意ができました。
モデルにenumの定義をする
あとはモデルにenumの定義をすれば完成です。
app/models/shift.rb
class Shift < ApplicationRecord
enum status: { unapproved: 0, approved: 1, rejected: 2 }
end
配列でも定義することが可能との記事がありますが、
integer型の場合は必ずハッシュで定義してください。
integer型かつ配列で定義した場合は以下のエラーが出ます。
[注意点]エラー
rails console
`enum': wrong number of arguments (given 2, expected 1) (ArgumentError)
最初、上記エラーが出てどうすればいいかわからず困りました。
コンソールで確認する
最後に、確認をしておきます。
rails console
$ Shift.new
お読みいただき、ありがとうございました!