我有一个类User
,它有一个字段permissions
,它是一个数组。查询基于数组字段值的位置
t.text "permissions", default: [], array: true
阵列permissions
可以具有一个或多个弦admin
,guest
的,和editor
。
如何编写where
查询以检索具有特定权限的所有Users
,比如editor
?我想在我的控制器中执行此操作。
我有一个类User
,它有一个字段permissions
,它是一个数组。查询基于数组字段值的位置
t.text "permissions", default: [], array: true
阵列permissions
可以具有一个或多个弦admin
,guest
的,和editor
。
如何编写where
查询以检索具有特定权限的所有Users
,比如editor
?我想在我的控制器中执行此操作。
假设你正在使用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中构建数组文字的便捷方式,而不必担心引用问题太多。
如果您使用的是SQL数据库:
User.where('permissions like ?', "%editor%")
我想在我的控制器中执行此操作。 – user1175969
对不起,我更新了答案,因为它有一个错误。 – drinor
这很好。谢谢! – user1175969