0
0

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 1 year has passed since last update.

【enum】列挙型の使い方

Posted at

はじめに

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

お読みいただき、ありがとうございました!

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?