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将有更好的枚举范围的支持。