[ruby-on-rails] Rails의 열거 형에서 정수 값을 얻는 방법은 무엇입니까?

데이터베이스의 열에 해당하는 모델에 열거 형이 있습니다.

enum외모가 좋아 :

  enum sale_info: { plan_1: 1, plan_2: 2, plan_3: 3, plan_4: 4, plan_5: 5 }

정수 값을 어떻게 얻을 수 있습니까?

난 노력 했어

Model.sale_info.to_i

그러나 이것은 0 만 반환합니다.



답변

열거 형이있는 클래스에서 열거 형의 정수 값을 가져올 수 있습니다.

Model.sale_infos # Pluralized version of the enum attribute name

다음과 같은 해시를 반환합니다.

{ "plan_1" => 1, "plan_2" => 2 ... }

그런 다음 Model클래스 인스턴스의 sale_info 값을 사용하여 해당 인스턴스 의 정수 값 액세스 할 수 있습니다 .

my_model = Model.find(123)
Model.sale_infos[my_model.sale_info] # Returns the integer value


답변

다음과 같이 정수를 얻을 수 있습니다.

my_model = Model.find(123)
my_model[:sale_info] # Returns the integer value

Rails 5 업데이트

rails 5의 경우 위의 메서드는 이제 문자열 값을 반환합니다.

지금 볼 수있는 가장 좋은 방법은 다음과 같습니다.

my_model.sale_info_before_type_cast

Shadwell의 답변은 레일 5에서도 계속 작동합니다.


답변

레일 <5

또 다른 방법은 다음을 사용하는 것입니다 read_attribute().

model = Model.find(123)
model.read_attribute('sale_info')

레일> = 5

당신이 사용할 수있는 read_attribute_before_type_cast

model.read_attribute_before_type_cast(:sale_info)
=> 1


답변

내 짧은 대답은 Model.sale_infos[:plan_2]당신이 가치를 얻고 싶다면plan_2


답변

Rails 5.1 앱에서 동일한 작업을 수행하기 위해 Model에 메서드를 작성했습니다.

케이스를 준비하고, 이것을 모델에 추가하고 필요할 때 객체에서 호출하십시오.

def numeric_sale_info
  self.class.sale_infos[sale_info]
end


답변