web-dev-qa-db-ja.com

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のみを返します。

96
Cleyton

Enumが存在するクラスからenumの整数値を取得できます。

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
124
Shadwell

次のように整数を取得できます。

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の回答は、Rails 5でも引き続き機能します。

123
Subtletree

Rails <5

別の方法は、read_attribute()を使用することです。

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

Rails> = 5

read_attribute_before_type_castを使用できます

model.read_attribute_before_type_cast(:sale_info)
=> 1
31
ArashM

Rails 5.1アプリで同じことを達成するために、モデルでメソッドを作成しました。

ケースに合わせて、これをモデルに追加し、必要に応じてオブジェクトで呼び出します

def numeric_sale_info
  self.class.sale_infos[sale_info]
end
1
shrmn

私の短い答えは、Model.sale_infos[:plan_2]の値を取得したい場合のplan_2です。

1
Brilliant-DucN