私は 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")