rails에서 모델에 enum을 정의하는데 "You tried to define an enum named "stage" on the model "Challenge", but..."이라는 에러가 발생합니다.


모델에 다음과 같은 enum을 정의하려고 하는데요.

class Model < ActiveRecord::Base
  enum stage: {member_only: 0, public: 1, demo: 2}

다음과 같은 에러가 발생합니다.

You tried to define an enum named "stage" on the model "@@@@", but this will generate a class method "public", which is already defined by Active Record.

왜그런걸까요?

  • 2016년 07월 16일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

조회수 92


1 답변


자답입니다.

모델에 enum을 만들면 아래와 같이 enum의 각 이름으로 메소드가 생깁니다.

class Conversation < ActiveRecord::Base
  enum status: [ :active, :archived ]
end

# conversation.update! status: 0
conversation.active!
conversation.active? # => true
conversation.status  # => "active"

# conversation.update! status: 1
conversation.archived!
conversation.archived? # => true
conversation.status    # => "archived"

출처

그래서 이미 다른 메소드 이름으로 사용중이면 enum에서 사용할 수가 없나보네요.

  • 2016년 07월 16일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close