我使用enum
作为users
表格中的列。我希望能够找到所有未处理的用户。这是我目前的代码:
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列的特定值外?
答案 0 :(得分:3)
在这种情况下,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.
<强>更新强>
上述答案实际上并不奏效。任何字符串都返回0
(因此,如果您正在寻找第一个枚举,它似乎有效。)
以下将实际使用您的枚举:
User.where.not("user.approval_status = ?", User.approval_statuses[:pending])
Note-Rails 5将具有更好的枚举范围支持。
答案 1 :(得分:2)
在Rails 6中,将负范围添加到枚举值上。
您可以像这样使用它:
User.not_pending
User.not_approved
User.not_declined
相关的pull request