sql >> Databasteknik >  >> RDS >> PostgreSQL

Rails ActiveRecord:Hur man använder bindningsvariabler med dubbla citattecken på jsonb

Du kan inte placera parameterplatshållare i citattecken.

Det faktum att Rails tillåter dig att göra det och ersätter en sträng med enkla citattecken inuti strängen med enstaka citattecken indikerar att Rails har misslyckats (som vanligt) att förstå reglerna för SQL.

Men du kan sätta en parameterplatshållare i ett uttryck, med andra strängar. Jag är inte en vanlig PostgreSQL-användare, men jag antar att du kan sammanfoga strängar för att bilda en komplett JSON-literal:

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

Du kanske upptäcker att det gör din kod mer tydlig om du parametriserar hela JSON-värdet. Använd %Q() för att undvika att behöva snedstreck de bokstavliga citattecken.

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

Eller för att vara säker på att generera giltig JSON, skulle jag lägga uttrycket i Ruby-syntax och sedan konvertera till JSON:

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



  1. ABS() Funktion i Oracle

  2. Infoga värden från en tabell till en tabell

  3. Hur man grupperar efter månad i MySQL

  4. Värderetur när inga rader i PDO