2016-03-17 70 views
1

我使用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列的特定值外?

回答

2

在這種情況下,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將有更好的枚舉範圍的支持。