PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Rails ActiveRecord:Cara menggunakan variabel bind dengan tanda kutip ganda di jsonb

Anda tidak dapat menempatkan placeholder parameter di dalam string yang dikutip.

Fakta bahwa Rails memungkinkan Anda untuk melakukan itu dan mengganti string yang dikutip tunggal di dalam string yang dikutip tunggal menunjukkan bahwa Rails telah gagal (seperti biasa) untuk memahami aturan SQL.

Tetapi Anda dapat menempatkan placeholder parameter dalam ekspresi, dengan string lain. Saya bukan pengguna PostgreSQL biasa, tetapi saya berasumsi Anda dapat menggabungkan string bersama untuk membentuk literal JSON lengkap:

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

Anda mungkin merasa kode Anda lebih jelas jika Anda membuat parameter seluruh nilai JSON. Gunakan %Q() untuk menghindari perlunya membuat garis miring terbalik pada tanda kutip ganda literal.

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

Atau untuk memastikan menghasilkan JSON yang valid, saya akan meletakkan ekspresi dalam sintaks Ruby, lalu mengonversinya ke 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. PostgreSQL:ada vs gabung kiri

  2. Panda menggunakan terlalu banyak memori dengan read_sql_table

  3. Opsi untuk mengambil nilai urutan saat ini (pada saat menjalankan kueri)

  4. doktrin dbal querybuilder sebagai pernyataan yang disiapkan

  5. Cara mengulangi nilai array jsonb PostgreSQL untuk tujuan pencocokan dalam kueri