PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Rails ActiveRecord:Jak używać zmiennych bind z podwójnymi cudzysłowami w jsonb?

Nie można umieszczać symboli zastępczych parametrów wewnątrz ciągów w cudzysłowie.

Fakt, że Railsy pozwalają to zrobić i podmieniają łańcuch w pojedynczym cudzysłowie wewnątrz łańcucha w pojedynczym cudzysłowie, wskazuje, że Railsom nie udało się (jak zwykle) zrozumieć zasad SQL.

Ale możesz umieścić symbol zastępczy parametru w wyrażeniu z innymi ciągami. Nie jestem zwykłym użytkownikiem PostgreSQL, ale zakładam, że możesz łączyć ze sobą łańcuchy, tworząc kompletny literał JSON:

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

Może się okazać, że sprawi to, że kod będzie bardziej przejrzysty, jeśli sparametryzujesz całą wartość JSON. Użyj %Q() aby uniknąć konieczności odwrotnego ukośnika w dosłownych podwójnych cudzysłowach.

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

Lub, aby upewnić się, że wygenerowałeś prawidłowy JSON, umieściłbym wyrażenie w składni Ruby, a następnie przekonwertowałem na JSON:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podziel ciąg z dwoma ogranicznikami i typ konwersji

  2. Jak mogę sprawdzić, co znajduje się w przestrzeni tabel Postgresql?

  3. Łączenie cakephp 2.0 z PostgreSQL

  4. PGAdmin III nie może połączyć się z AWS RDS

  5. Jak połączyć C# z Postgresem?