2017-03-09 11 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を使用して配列の各要素と比較され、ブール結果が返されます。

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

あなたはまた、overlaps operator (&&)

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

を使用することができます:xはそうあなたが言うことができるsome_arrayの要素のいずれかと等しい場合x = any(some_array)を使用して

はチェックするのに便利な方法ですarray[...]の構文は、引用問題をあまり心配することなく、PostgreSQLで配列リテラルを構築する便利な方法です。

+0

これは素晴らしいです。ありがとう! – user1175969

-3

あなたがSQLデータベースを使用している場合:

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

私のコントローラでこれをやりたい – user1175969

+0

申し訳ありませんが、私は間違いがあったので、答えを更新しました。 – drinor

関連する問題