2015-12-22 57 views
2

我有一個用戶表是這樣的:如何找到2條記錄不條件在rails where子句中?

-------------------- 
| id | name | role | 
-------------------- 
| ...| ... | ... | 
-------------------- 

角色列有3種角色:管理員,買家和用戶。下面約定:

role != 'buyer' and role != 'admin' ==> User is a normal user 

(這意味着角色可以有值:無「」或曼尼不同的價值觀,不同的「買家」和「管理員」)

role = 'buyer' ==> User is a buyer 

role = 'admin' ==> User is an admin 

現在,我想找到所有的用戶在所有3個場景:

@admins = User.where(role: 'admin').all (work fine!) 
@buyers = User.where(role: 'buyer').all (work fine!) 

一切正常的用戶,但這似乎不工作:

@users = User.where("role!='buyer' and role!='admin'").all (not working!) 

任何人都可以幫我找到所有的普通用戶嗎?提前致謝!

回答

2

對於所有軌道版本,

User.where('role NOT IN (?)', ['buyer', 'admin']) 

如果您使用的鋼軌> = 4,

User.where.not(role: ['buyer', 'admin']) 
+0

我終於發現了問題,問題是,當角色列的值是零,我們無法找到該記錄。但是,除了nil以外的角色列的值,我們可以找到它。 –

+1

如果因爲'''User.where.not(role:['buyer','admin'])'''等於'''WHERE角色!= buyer而存在nil值,Emu的解決方案就不會工作AND角色!= admin''',因爲'''NULL!= any_string'''是虛假的'''unknown'''任何有nil值的記錄都不會被返回 – user3409950

+1

@ user3409950我必須改變我的代碼以防止角色列中的無值,但無論如何Emu的解決方案幫助我的代碼看起來更漂亮:)) –