RailsでPostgresql JSONB型をクエリするために? (疑問符)演算子をエスケープする方法 質問する

RailsでPostgresql JSONB型をクエリするために? (疑問符)演算子をエスケープする方法 質問する

私は Rails 4.2 と Postgres 9.4 を使用して、新しい JSONB データ型を試しています。データベース内の JSONB 列の 1 つに配列が保持されており、この配列に特定の値が含まれているレコードをクエリできるようにしたいと考えています。新しい JSONB の「疑問符」(「contains」) 演算子を使用してこれを実行する方法を見つけました。詳細は、次のドキュメントを参照してください。http://www.postgresql.org/docs/9.4/static/functions-json.html

したがって、生の SQL では、次の例のように動作させることができます。

SELECT * FROM people WHERE roles ? '32486d83-4a38-42ba-afdb-f77ca40ea1fc';

しかし、ActiveRecord 経由で Rails 内からこのクエリを実行する方法がわかりません。次のように、「where」メソッドを使用して生のクエリを実行してみました。

Person.where("roles ? ?", "32486d83-4a38-42ba-afdb-f77ca40ea1fc")

しかし、疑問符はパラメータを置き換えるために使用される特殊文字であるため、次のエラーが発生します。

ActiveRecord::PreparedStatementInvalid: ロール内のバインド変数の数が間違っています (2 個中 1 個)。

文字「?」を文字通り通過させたいので、文字「?」をエスケープする方法が必要だと思います。\? と ?? を試しましたが、うまくいきませんでした。どなたか助けていただければ幸いです。

ベストアンサー1

これを以下のように呼び出す必要があります:

Person.where("roles ? :name", name: "32486d83-4a38-42ba-afdb-f77ca40ea1fc")

おすすめ記事