2017-03-09 69 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