我有一个类User
,其字段permissions
是一个数组。
t.text "permissions", default: [], array: true
数组permissions
可以包含一个或多个字符串admin
,guest
和editor
。
如何撰写where
查询以检索具有特定权限的所有Users
,例如editor
?我想在我的控制器中执行此操作。
答案 0 :(得分: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中构建数组文字的便捷方法,而不必担心过多地引用问题。
答案 1 :(得分:-3)
如果您使用的是SQL数据库:
User.where('permissions like ?', "%editor%")