PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Un campo rails che è un array di oggetti JSON?

Dato che stai usando postgres, sei fortunato:postgres ha un json genere. Questo è molto meglio che usare serialize per archiviare i dati come una qualche forma di stringa codificata, perché postgres ha una ricca famiglia di operatori che ti consentono di eseguire query su quei dati json.

Se stai usando Postgres 9.4, puoi anche usare il tipo jsonb. Questo è generalmente migliore in quanto memorizza una versione elaborata dei dati (cioè non deve continuare ad analizzare i dati più e più volte) e consente gli indici.

Rails lo supporta immediatamente (vedi qui ), devi solo aggiungere una colonna di tipo json(b). Se la tua migrazione contiene

create_table :damages do |t|
  t.string :description
  t.jsonb :damage_points
end

poi

Damage.create(damage_points:  [{left: 40, top: 99}, {left: 100, top: 35}])

creerebbe una riga con l'archivio dati dei punti di danno come json. L'unica cosa a cui prestare attenzione è che, sebbene i dati di input abbiano simboli come chiavi negli hash, durante il recupero dal database otterrai sempre le stringhe come chiavi.