我在Model中有一个枚举,它对应于数据库中的列。enum看起来像:
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。
4ioopgfo1#
另一种方法是使用read_attribute():
read_attribute()
model = Model.find(123) model.read_attribute('sale_info')
字符串
可以使用read_attribute_before_type_cast
read_attribute_before_type_cast
model.read_attribute_before_type_cast(:sale_info) => 1
型
oxiaedzo2#
我的简短回答是Model.sale_infos[:plan_2],如果你想得到plan_2的值,
Model.sale_infos[:plan_2]
plan_2
piok6c0g3#
我在我的Model中写了一个方法来在我的Rails 5.1应用程序中实现同样的功能。根据您的情况,将其添加到Model中,并在需要时在对象上调用它
def numeric_sale_info self.class.sale_infos[sale_info] end
owfi6suc4#
这里的大多数解决方案都需要你手头有一个记录或模型类。这里有一种方法,你可以通过使用Hash的.key方法从枚举中获取整数值,而不需要创建记录:
.key
sale_info.key('plan_3') => 3
字符串如果您正在执行一些ETL并在依赖于不同场景中的数字整数值和/或字符串值的系统之间将原始值Map到字符串值/从字符串值Map原始值,则这一点特别有用。请注意,这可能不是很高的性能,因为在散列中搜索值(而不是键)效率不高。如果你每秒处理数百万个值,或者有一个包含数百个值的枚举,你可能需要构建一个新的散列,将枚举的值和键反转,这样你就可以在相反的方向上进行高效的查找。
gr8qqesn5#
您可以从枚举所在的类中获取枚举的整数值:
Model.sale_infos # Pluralized version of the enum attribute name
字符串它返回一个哈希值,如下所示:
{ "plan_1" => 1, "plan_2" => 2 ... }
型然后,您可以使用Model类示例中的销售_info值来访问该示例 * 的整数值 *:
Model
my_model = Model.find(123) Model.sale_infos[my_model.sale_info] # Returns the integer value
b5lpy0ml6#
你可以像这样得到整数:
my_model = Model.find(123) my_model[:sale_info] # Returns the integer value
更新为Rails 5
对于rails 5,上面的方法现在返回字符串值:(目前我能想到的最好的方法是:
my_model.sale_info_before_type_cast
型沙德维尔的答案也适用于rails 5。
6条答案
按热度按时间4ioopgfo1#
Rails < 5
另一种方法是使用
read_attribute()
:字符串
Rails >= 5
可以使用
read_attribute_before_type_cast
型
oxiaedzo2#
我的简短回答是
Model.sale_infos[:plan_2]
,如果你想得到plan_2
的值,piok6c0g3#
我在我的Model中写了一个方法来在我的Rails 5.1应用程序中实现同样的功能。
根据您的情况,将其添加到Model中,并在需要时在对象上调用它
字符串
owfi6suc4#
这里的大多数解决方案都需要你手头有一个记录或模型类。这里有一种方法,你可以通过使用Hash的
.key
方法从枚举中获取整数值,而不需要创建记录:字符串
如果您正在执行一些ETL并在依赖于不同场景中的数字整数值和/或字符串值的系统之间将原始值Map到字符串值/从字符串值Map原始值,则这一点特别有用。
请注意,这可能不是很高的性能,因为在散列中搜索值(而不是键)效率不高。如果你每秒处理数百万个值,或者有一个包含数百个值的枚举,你可能需要构建一个新的散列,将枚举的值和键反转,这样你就可以在相反的方向上进行高效的查找。
gr8qqesn5#
您可以从枚举所在的类中获取枚举的整数值:
字符串
它返回一个哈希值,如下所示:
型
然后,您可以使用
Model
类示例中的销售_info值来访问该示例 * 的整数值 *:型
b5lpy0ml6#
你可以像这样得到整数:
字符串
更新为Rails 5
对于rails 5,上面的方法现在返回字符串值:(
目前我能想到的最好的方法是:
型
沙德维尔的答案也适用于rails 5。