sql >> Database teknologi >  >> RDS >> PostgreSQL

Rails ActiveRecord:Sådan bruges bindevariabler med dobbelte anførselstegn på jsonb

Du kan ikke placere parameterpladsholdere i citerede strenge.

Det faktum, at Rails tillader dig at gøre det og erstatter en streng med et enkelt citat inde i strengen med et enkelt citat, indikerer, at Rails (som sædvanligt) ikke har forstået reglerne for SQL.

Men du kan sætte en parameterpladsholder i et udtryk med andre strenge. Jeg er ikke en almindelig PostgreSQL-bruger, men jeg antager, at du kan sammenkæde strenge sammen for at danne en komplet JSON-literal:

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

Du vil måske opdage, at det gør din kode mere klar, hvis du parametrerer hele JSON-værdien. Brug %Q() for at undgå at skulle skråstille de bogstavelige dobbelte anførselstegn.

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

Eller for at være sikker på at generere gyldig JSON, ville jeg sætte udtrykket i Ruby-syntaks og derefter konvertere til JSON:

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



  1. SQL oprettelse af tabelafhængigheder

  2. Sådan beregnes hældningen i SQL

  3. Python Oracle DB Connect uden Oracle Client

  4. SSIS konverterer Varchar2 til DT_STR