sql >> Database >  >> RDS >> PostgreSQL

Rails ActiveRecord:Bindvariabelen gebruiken met dubbele aanhalingstekens op jsonb

U kunt geen tijdelijke aanduidingen voor parameters in tekenreeksen tussen aanhalingstekens plaatsen.

Het feit dat Rails je toestaat om dat te doen en een string met enkele aanhalingstekens vervangt in de string met enkele aanhalingstekens, geeft aan dat Rails er (zoals gewoonlijk) niet in is geslaagd de regels van SQL te begrijpen.

Maar u kunt een tijdelijke aanduiding voor een parameter in een expressie plaatsen, met andere tekenreeksen. Ik ben geen gewone PostgreSQL-gebruiker, maar ik neem aan dat je strings kunt samenvoegen om een ​​volledige JSON-letterlijk te vormen:

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

Mogelijk vindt u dat het uw code duidelijker maakt als u de hele JSON-waarde parametreert. Gebruik %Q() om te voorkomen dat u de letterlijke dubbele aanhalingstekens moet backslashen.

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

Of om er zeker van te zijn dat ik een geldige JSON genereer, zou ik de expressie in de Ruby-syntaxis plaatsen en vervolgens converteren naar JSON:

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



  1. Postgres UNIEKE BEPERKING voor array

  2. Wat is de beste manier om Polymorphic Association in SQL Server te implementeren?

  3. Hoe een aangepaste CrudRepository-methode (@Query) te schrijven om het resultaat in mijn geval te filteren

  4. Record geretourneerd door functie heeft kolommen aaneengeschakeld