sql >> データベース >  >> RDS >> PostgreSQL

Rails ActiveRecord:jsonbで二重引用符を使用してバインド変数を使用する方法

    引用符で囲まれた文字列内にパラメータプレースホルダーを配置することはできません。

    Railsでそれが可能になり、一重引用符で囲まれた文字列を一重引用符で囲まれた文字列に置き換えるという事実は、Railsが(通常どおり)SQLのルールを理解できなかったことを示しています。

    ただし、他の文字列を使用して、式にパラメータプレースホルダーを配置できます。私は通常のPostgreSQLユーザーではありませんが、文字列を連結して完全なJSONリテラルを形成できると思います:

    Blog.where("upload_data @> '[ { \"name\": \"' || ? || '\"}]'", name)
    

    JSON値全体をパラメーター化すると、コードがより明確になる場合があります。 %Q()を使用する リテラルの二重引用符をバックスラッシュする必要がないようにします。

    Blog.where("upload_data @> ?", %Q([ { "name": "#{name}" } ]))
    

    または、有効なJSONを確実に生成するために、式をRuby構文に入れてから、JSONに変換します。

    Blog.where("upload_data @> ?", JSON.generate( [{name: name}] ))
    



    1. XMLデータをSQLServerデータベース列に細断処理す​​るための最良の方法

    2. Postgresで同等のSELECT*FROM NEW TABLE

    3. エラー1833(HY000):列MySQLを変更できません

    4. SQLクエリを使用して比率を計算する方法は?