2015-12-22 62 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的解决方案帮助我的代码看起来更漂亮:)) –