Ruby on rails Ruby中的枚举和获取字符串值

Ruby on rails Ruby中的枚举和获取字符串值,ruby-on-rails,ruby,enums,module,Ruby On Rails,Ruby,Enums,Module,我的一个rails型号中有以下模块: module Color RED = 0 BLUE = 1 YELLOW = 2 end 我通过执行Color::RED等操作,将这些值作为int存储在db中。当我检索回这些值时,我希望得到字符串,即“RED”。但我在转换0->“红色”/“红色”时遇到问题。我错过了什么?我可以用模块方法来实现这一点吗?或者有更好的方法吗?因为您不能使用Rails ActiveRecordenum,所以哈希可能很有用: COLORS = { "red" =

我的一个rails型号中有以下模块:

module Color
   RED = 0
   BLUE = 1
   YELLOW = 2
end

我通过执行
Color::RED
等操作,将这些值作为int存储在db中。当我检索回这些值时,我希望得到字符串,即“RED”。但我在转换0->“红色”/“红色”时遇到问题。我错过了什么?我可以用模块方法来实现这一点吗?或者有更好的方法吗?

因为您不能使用Rails ActiveRecord
enum
,所以哈希可能很有用:

COLORS = { "red" => 0, "blue" => 1, "yellow" => 2 }
存储颜色代码 从颜色代码转换,使用方法 您甚至可以为此制作一个助手,例如:

def color_code_to_string(code)
  COLORS.key(code) # returning a default color in case if wrong code number is a good idea too
end

由于无法使用Rails ActiveRecord
enum
,因此哈希可能很有用:

COLORS = { "red" => 0, "blue" => 1, "yellow" => 2 }
存储颜色代码 从颜色代码转换,使用方法 您甚至可以为此制作一个助手,例如:

def color_code_to_string(code)
  COLORS.key(code) # returning a default color in case if wrong code number is a good idea too
end

你读过的文档了吗?我没有使用ActiveRecord,所以我得到了Event:Class`的
NoMethodError:undefined method
enum',还使用了Rails 3.2,我不确定我是否理解你的问题。您是否希望数据库返回
“red”
而不是
0
?转换必须在您的模型中完成。您的数据库不知道您的
Color
模块或其常量。即使此代码看起来像C族语言中的枚举,也不知道。它只是一个定义了三个常量的模块。要实现您想要的功能,您应该使用不同的数据结构,例如下面@Nimir所描述的哈希。您阅读了的文档了吗?我没有使用ActiveRecord,所以我得到了Event:Class`的
NoMethodError:undefined method
enum',还使用了Rails 3.2。我不确定是否理解您的问题。您是否希望数据库返回
“red”
而不是
0
?转换必须在您的模型中完成。您的数据库不知道您的
Color
模块或其常量。即使此代码看起来像C族语言中的枚举,也不知道。它只是一个定义了三个常量的模块。要实现您想要的功能,您应该使用不同的数据结构,例如下面@Nimir所描述的哈希。除非OP特别需要符号键,否则我认为在这里使用字符串键更有意义(
COLORS={“red”=>0,…}
)因此,最后一行不需要使用
to_s
。@Jordan:使用符号进行哈希查找不是比使用字符串更快吗?@user1934428是的,大约快50%。然而,如果OP按值进行的查找比按键进行的查找更多,并且每次都调用
到\u s
,那么这一优势可能很容易被否定。在我看来,无论哪种方式,这都是过早的优化。如果性能是一个问题,那么
COLORs.key(code)
是一个更大的问题,因为
Hash#key
是O(n)(而
Hash#[]
是O(1)。除非OP特别需要符号键,否则我认为在这里使用字符串键更有意义(
COLORs={“red”=>0,}
)因此,最后一行不需要使用
to_s
。@Jordan:使用符号进行哈希查找不是比使用字符串更快吗?@user1934428是的,大约快50%。然而,如果OP按值进行的查找比按键进行的查找更多,并且每次都调用
到\u s
,那么这一优势可能很容易被否定。在我看来,无论哪种方式,这都是过早的优化。如果性能是一个问题,那么
COLORs.key(code)
是一个更大的问题,因为
Hash#key
是O(n)(而
Hash#[]
是O(1))。