2017-03-09 28 views
0

我有一个类User,它有一个字段permissions,它是一个数组。查询基于数组字段值的位置

t.text "permissions", default: [], array: true 

阵列permissions可以具有一个或多个弦adminguest的,和editor

如何编写where查询以检索具有特定权限的所有Users,比如editor?我想在我的控制器中执行此操作。

回答

2

假设你正在使用PostgreSQL,你用any

9.23.3。 ANY/SOME(阵列)

expression operator ANY (array expression)
expression operator SOME (array expression)

右手边是一个括号表达式,其必须产生一个数组值。使用给定的operator评估左侧表达式并将其与数组中的每个元素进行比较,其必须产生布尔结果。

使用x = any(some_array)是检查的一种便捷方式,如果x等于任何some_array的元素,所以你可以说:

User.where(':permission = any(permissions)', :permission => your_permission) 

您也可以使用overlaps operator (&&)

User.where('permissions && array[?]', your_permission) 

array[...]语法是一种在PostgreSQL中构建数组文字的便捷方式,而不必担心引用问题太多。

+0

这很好。谢谢! – user1175969

-3

如果您使用的是SQL数据库:

User.where('permissions like ?', "%editor%") 
+0

我想在我的控制器中执行此操作。 – user1175969

+0

对不起,我更新了答案,因为它有一个错误。 – drinor