Rails枚举负范围(不在)

问题描述:

我使用enum作为我的users表中的列。我希望能够找到所有未处理的用户。这是我当前的代码:Rails枚举负范围(不在)

enum approval_status: [:pending, :approved, :declined] 

User.where.not(approval_status: :pending) 

但SQL查询语句就会变成这样:

User Load (0.5ms) SELECT `users`.* FROM `users` WHERE (`users`.`approval_status` != NULL) 

无论我提出什么枚举值,在SQL它变成NULL

如何获得所有用户,除了approval_status列的特定值外?

在这种情况下,Rails无法处理符号。 然而,串做工精细字符串被打破过,但以不同的方式:

enum approval_status: [:pending, :approved, :declined] 

User.where.not(approval_status: :pending) //breaks 
User.where.not(approval_status: 'pending') //returns 0 no matter what the string is. 

UPDATE

以上回答不实际工作。任何字符串都会返回0(因此,如果您正在寻求第一次枚举,它看起来很有用)。

下面将实际使用您的枚举:

User.where.not("user.approval_status = ?", User.approval_statuses[:pending]) 

注摆幅5将有更好的枚举范围的支持。