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

Sam*_*rma 5 ruby enums ruby-on-rails

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

像这里:编码约定 - 命名枚举

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

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

因此,例如我status在我的模型中有一个枚举,根据惯例,它可以是活动的,草稿的或非活动的,如果它是:

enum status: {active: 1, draft: 2, inactive: 3}
Run Code Online (Sandbox Code Playgroud)

要么:

enum status: {ACTIVE: 1, DRAFT: 2, INACTIVE: 3}
Run Code Online (Sandbox Code Playgroud)

哪一个和为什么?

max*_*max 8

在Rails中,enums应该是snake_case.

为什么?因为枚举用于构造方法名称.Ruby中的方法名称应该符合snake_case 社区惯例.使用ALLCAPSCamelCase可能导致错误和混乱,因为Ruby将此类标识符视为常量.

ActiveRecord :: Enum与Java等语言级枚举构造不具有可比性.

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

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

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

enum status: [ :ACTIVE, :DRAFT, :INACTIVE ] 
Run Code Online (Sandbox Code Playgroud)

枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量.变量必须等于为其预定义的值之一.常见示例包括罗盘方向(NORTH,SOUTH,EAST和WEST的值)和星期几.
https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

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


Ser*_*sev 6

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

我认为这是主要原因,是的.这是一个在红宝石高度unidiomatic有方法,例如obj.Active?obj.ACTIVE?.一个人不需要任何理由.:)

  • @mudasobwa我_knew_有人会弹出这个.:)那些是转换方法.与_on purpose_类名称相同.与常规方法非常不同(意图). (2认同)
  • @mudasobwa:我敢让你找到一个遵循这个命名约定的单个谓词:) (2认同)