如何从Rails中的枚举中获取整数值?

时间:2014-08-29 14:17:53

标签: ruby-on-rails ruby-on-rails-4

我的模型中有一个与数据库中的列对应的枚举。

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。

5 个答案:

答案 0 :(得分:120)

您可以像这样得到整数:

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.

答案 1 :(得分:119)

您可以从枚举所在的类中获取枚举的整数值:

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

答案 2 :(得分:29)

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

答案 3 :(得分:1)

我的简短回答为Model.sale_infos[:plan_2],以防您想获得plan_2的价值

答案 4 :(得分:1)

我在我的模型中编写了一个方法,以便在我的Rails 5.1应用程序中实现相同的功能。

根据您的情况,将其添加到您的模型中,并在需要时在对象上调用

def numeric_sale_info
  self.class.sale_infos[sale_info]
end