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

조회수 1069회

모델에 다음과 같은 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.

왜그런걸까요?

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에서 사용할 수가 없나보네요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)