루비 온 레일즈에서 Enum 사용법 (How to use enum in Ruby on Rails)


## 루비 온 레일즈에서 enum 사용법

---

일단 enum(<strike>이눔...</strike>)이 무엇인가에 대해서 알아보자.

### enum이란

---

컴퓨터 프로그래밍에서 열거형, 이넘, 팩터는 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다. 일부 열거자 자료형은 언어에 기본 소속되어 있을 수 있다. - 출처 : 위키백과

이렇게 글로 쓰면 잘 모르겠으니 코드로 확인해보자.

```ruby
enum role: { 
  admin: 0, 
  manager: 1,
  normal: 2,
  developer: 3
}
```

사용자의 역할을 구분하는 경우가 보통인데, 위와 같이 사용자의 역할마다 번호를 부여해 사용할 수 있다.

근데 왜 이걸, enum을  써야하는가? 라는 의문이 든다. 어떻게 사용하는지와 함께 enum의 장점을 확인해보자.

### enum 사용법 & 장점

---

예를 들어 User 모델이 있으며, role 이라는 attribute 가 있다고 가정하자. 이 때 User 모델에 enum으로 role 을 정의한다.

```ruby
class User < ApplicationRecord
 enum role: { 
    admin: 0, 
    manager: 1,
    normal: 2,
    developer: 3
  }
end
```

이렇게 하면 admin은 0, manager는 1과 매핑이 된 것이다. 예를 들어 role이 normal인 유저를 찾을 때 아래에 있는 두 개 코드 모두 다 같은 값 normal_user 를 갖는다.

```ruby
normal_user = User.where(role: 2)
```

``` ruby
normal_user = User.where(role: "normal")
```

이게 끝이라면 조금 허무하다. enum은 아래와 같이도 사용할 수 있다. User id가 3인 사용자의 역할을 manager로 바꾸고 싶다면,

```ruby
User.find(3).manager!
```

라고 하면 role 이 manager로 바뀐다. 뿐만 아니라 role의 값도 확인할 수 있다.

```ruby
User.find(3).manager?
```

만약 role이 manager였다면 true, 아니면 false 를 return 해준다. 아래와 같은 것도 가능하다.

```ruby
User.manager
```

위의 코드는 User 모델에서 role이 manager 인 user를 찾아준다. 마치 where(role: manager)와 같다.

---

참고 : 

[https://withrails.com/2015/07/13/activerecordenum-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%98%95%EC%9D%98-%ED%99%9C%EC%9A%A9-2/](https://withrails.com/2015/07/13/activerecordenum-데이터형의-활용-2/)


댓글

이 블로그의 인기 게시물

부트스트랩 사용 시 버튼 오른쪽 정렬하는 방법 (How to use float-right for right align in bootstrap)

맥(Mac)에서 MySql 사용 시 Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 오류가 발생하는 경우 해결 방법

HTML, CSS - footer fixed (foot 하단 고정 시키기)