sql >> Databáze >  >> RDS >> PostgreSQL

Rails ActiveRecord:Jak používat proměnné vazby s dvojitými uvozovkami na jsonb

Zástupné symboly parametrů nelze vkládat do řetězců v uvozovkách.

Skutečnost, že vám to Rails umožňuje a nahradí řetězec s jednou uvozovkou uvnitř řetězce s jednou uvozovkou, naznačuje, že Rails (jako obvykle) neporozuměl pravidlům SQL.

Ale můžete do výrazu vložit zástupný symbol parametru s jinými řetězci. Nejsem běžný uživatel PostgreSQL, ale předpokládám, že můžete zřetězit řetězce dohromady a vytvořit tak úplný literál JSON:

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

Možná zjistíte, že váš kód bude jasnější, pokud parametrizujete celou hodnotu JSON. Použijte %Q() abyste se vyhnuli nutnosti zpětného lomítka doslovných dvojitých uvozovek.

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

Nebo abych se ujistil, že vygeneruji platný JSON, vložil bych výraz do syntaxe Ruby a poté převedl na JSON:

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



  1. Jak exportovat a importovat databázi mysql s jejími daty pomocí skriptu php?

  2. MySQL – výchozí hodnota pro TIMESTAMP(3)

  3. Jak mohu použít funkci CONCAT v SQL Server 2008 R2?

  4. Zvyšte pole databáze mysql pomocí syntaxe aktivního záznamu codeigniter