PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Rails ActiveRecord:Cách sử dụng biến ràng buộc với dấu ngoặc kép trên jsonb

Bạn không thể đặt trình giữ chỗ tham số bên trong các chuỗi được trích dẫn.

Thực tế là Rails cho phép bạn làm điều đó và thay thế một chuỗi được trích dẫn đơn bên trong chuỗi được trích dẫn đơn chỉ ra rằng Rails đã không hiểu được các quy tắc của SQL (như thường lệ).

Nhưng bạn có thể đặt một trình giữ chỗ tham số trong một biểu thức, với các chuỗi khác. Tôi không phải là người dùng PostgreSQL thông thường, nhưng tôi cho rằng bạn có thể nối các chuỗi với nhau để tạo thành một chữ JSON hoàn chỉnh:

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

Bạn có thể thấy nó làm cho mã của bạn rõ ràng hơn nếu bạn tham số hóa toàn bộ giá trị JSON. Sử dụng %Q() để tránh cần phải gạch chéo ngược các dấu ngoặc kép theo nghĩa đen.

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

Hoặc để đảm bảo tạo JSON hợp lệ, tôi sẽ đặt biểu thức theo cú pháp Ruby, sau đó chuyển đổi thành 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. Làm thế nào để xác định lại toàn cầu tiếp theo trong PostgreSQL?

  2. Lưu trữ và truy xuất hình ảnh trong Postgresql bằng Java

  3. Trình tự không đặt lại sau khi cắt bớt bảng

  4. Truy xuất dữ liệu i18n với ngôn ngữ dự phòng

  5. Xác thực tính duy nhất trong cơ sở dữ liệu khi xác nhận có điều kiện