enum
은 열거형을 정의할 때 사용하는 enum
키워드로, 열거, 목록을 뜻하는 enumeration
에서 따온 것이다.enum
은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합이라고 할 수 있다.enum
은 class
, interface
와 동급의 형식을 가지는 단위다. enum
은 사실상 class
이다.enum
만을 위한 문법적 형식을 가지고 있기 때문에 구분하기 위해서 enum
이라는 키워드를 사용하는 것이다.Q. 왜 굳이 integer
데이터타입을 써서 enum
을 쓰는 걸까요? 그냥 string
타입을 쓰면 되는 거 아닌가요?
string
으로 저장하게 되면 매번 비즈니스로직을 짤 때 매번 string
으로 값을 넣어야 하는데, 조금이라도 오타가 있다면 다른 데이터가 들어갈 수 있습니다.전역변수
로 하면 해결이 됩니다만...)enum
을 쓰게 되면 기존에 저장하지 않은 데이터가 들어가게 되면 저장이 되지 않습니다. 그러므로 조금 더 엄밀하게 설계를 할 수 있다는 장점이 있습니다.우선 칼럼을 생성할 마이그레이션 파일을 만들어 준다.
rails g migration add_status_to_items status:integer
칼럼을 추가해준다. 이때 default값을 주면 좋다.
class AddStatusToItems < ActiveRecord::Migration[6.0]
def change
add_column :items, :status, :integer, default: 0
end
end
Model
에서 관리할 enum
을 정의해준다✅ 방법1 : 배열을 사용하기
class Item < ApplicationRecord
enum status: [:active, :pending, :disabled]
end
✅ 방법2 : 해쉬를 사용하기
class Item < ApplicationRecord
enum status: {active: 0, pending: 1, disabled: 3}
end