Rails中的枚举:大写还是小写?

时间:2016-10-20 10:56:55

标签: ruby-on-rails ruby enums

在互联网上大多数提及JAVA枚举时,无处不在提到枚举应该全部为大写(例如:ACTIVE)。

像这里:Coding Conventions - Naming Enums

但是当涉及到Rails时,在所有示例和文档中,它们都使用小写枚举值(例如:'active'),如下所示:http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html

这是有道理的,因为rails还通过这些枚举的名称提供实例方法(例如:obj.active?)。这是Rails中的枚举被用作小写的唯一原因,还是有更多呢? 当我们使用枚举作为小写时,我们也不同于惯例,是否应该这样?或者我们也应该在Rails中使用大写枚举?

例如,我的模型中有一个status枚举,可以是活动草稿非活动按照惯例,应该是:

enum status: {active: 1, draft: 2, inactive: 3}

或:

enum status: {ACTIVE: 1, DRAFT: 2, INACTIVE: 3}

哪一个和为什么?

2 个答案:

答案 0 :(得分:7)

在Rails中,枚举应为snake_case

为什么呢?因为枚举用于构造方法名称。 Ruby中的方法名称应为snake_case according to the community convention。使用ALLCAPSCamelCase会导致错误和混乱,因为Ruby会将此类标识符视为常量。

ActiveRecord::Enum与语言级枚举构造(例如Java中)无法比较。

  

声明一个枚举属性,其中值映射到的整数   数据库,但可以通过名称查询   http://api.rubyonrails.org/classes/ActiveRecord/Enum.html

ActiveRecord :: Enum中的键映射不是常量。相反,它只是一个与Ruby风格元编程一起使用的列表,它添加了使位掩码列更容易(和更有趣)的方法。

在您的示例中,它实际上与:

相当
enum status: [ :ACTIVE, :DRAFT, :INACTIVE ] 
  

枚举类型是一种特殊的数据类型,它允许变量   一组预定义的常量。变量必须等于其中一个   已为其预定义的值。常见的例子包括   指南针方向(NORTH,SOUTH,EAST和WEST的值)和   一周中的几天   https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

Java中的枚举基本上是美化的switch语句,其中类常量表示可能的值。

答案 1 :(得分:6)

  

这是有道理的,因为rails还通过这些枚举的名称提供实例方法(例如:obj.active?)。这是RAILS中枚举用作小写

的唯一原因

我认为这是主要原因,是的。使用obj.Active?obj.ACTIVE?等方法在ruby中非常不引人注意。一个人不需要任何理由。 :)