我有一個類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