PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Un champ rails qui est un tableau d'objets JSON ?

Comme vous utilisez postgres, vous avez de la chance :postgres a un json taper. C'est bien mieux que d'utiliser serialize pour stocker les données sous forme de chaîne encodée, car postgres possède une riche famille d'opérateurs qui vous permettent d'interroger ces données json.

Si vous utilisez postgres 9.4, vous pouvez également utiliser le type jsonb. C'est généralement mieux car il stocke une version traitée des données (c'est-à-dire qu'il n'a pas à réanalyser les données encore et encore) et il autorise les index.

Rails prend cela en charge dès la sortie de la boîte (voir ici ), il vous suffit d'ajouter une colonne de type json(b). Si votre migration contient

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

alors

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

créerait une ligne avec le magasin de données des points de dégâts en tant que json. La seule chose à laquelle il faut faire attention est que bien que vos données d'entrée aient des symboles comme clés dans les hachages, lors de la récupération à partir de la base de données, vous obtiendrez toujours des chaînes en tant que clés.