データベースの列に対応する列挙型がモデルにあります。
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のみを返します。
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
次のように整数を取得できます。
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でも引き続き機能します。
別の方法は、read_attribute()
を使用することです。
model = Model.find(123)
model.read_attribute('sale_info')
read_attribute_before_type_cast
を使用できます
model.read_attribute_before_type_cast(:sale_info)
=> 1
Rails 5.1アプリで同じことを達成するために、モデルでメソッドを作成しました。
ケースに合わせて、これをモデルに追加し、必要に応じてオブジェクトで呼び出します
def numeric_sale_info
self.class.sale_infos[sale_info]
end
私の短い答えは、Model.sale_infos[:plan_2]
の値を取得したい場合のplan_2
です。