Khi bạn đang sử dụng postgres, bạn thật may mắn:postgres có một bản gốc json loại hình. Cách này tốt hơn so với việc sử dụng serialize để lưu trữ dữ liệu dưới dạng một số dạng chuỗi được mã hóa, vì postgres có một nhóm toán tử phong phú cho phép bạn truy vấn dữ liệu json đó.
Nếu bạn đang sử dụng postgres 9.4 thì bạn cũng có thể sử dụng kiểu jsonb. Điều này thường tốt hơn vì nó lưu trữ một phiên bản dữ liệu đã xử lý (tức là nó không phải tiếp tục sao chép lại dữ liệu nhiều lần) và nó cho phép lập chỉ mục.
Rails hỗ trợ điều này ngay lập tức (xem tại đây ), bạn chỉ cần thêm một cột kiểu json (b). Nếu quá trình di chuyển của bạn chứa
create_table :damages do |t|
t.string :description
t.jsonb :damage_points
end
sau đó
Damage.create(damage_points: [{left: 40, top: 99}, {left: 100, top: 35}])
sẽ tạo một hàng với kho lưu trữ dữ liệu điểm thiệt hại dưới dạng json. Điều duy nhất cần chú ý là mặc dù dữ liệu đầu vào của bạn có ký hiệu là các khóa trong hàm băm, nhưng khi tìm nạp từ cơ sở dữ liệu, bạn sẽ luôn nhận lại các chuỗi dưới dạng khóa.