web-dev-qa-db-fra.com

Rails: Sérialiser des objets dans une base de données?

Je cherche des conseils généraux sur la sérialisation d'objets dans une base de données.

  1. Que sont les objets sérialisés?
  2. Quels sont les meilleurs scénarios pour la sérialisation d'objets dans une base de données?
  3. Quels attributs utilisez-vous lors de la création de la colonne dans la base de données pour pouvoir utiliser un objet sérialisé?
  4. Comment sauvegarder un objet sérialisé?
  5. Et comment accéder à l'objet sérialisé et à ses attributs? (Utiliser des hachages?)
31
keruilin

En informatique, dans le contexte du stockage et de la transmission des données, la sérialisation consiste à convertir une structure de données ou un objet en une suite de bits, de manière à ce qu'il puisse être stocké dans un fichier, dans une mémoire tampon ou transmis via un lien de connexion réseau. être "ressuscité" plus tard dans le même environnement ou dans un autre environnement informatique. (voir http://fr.wikipedia.org/wiki/Serialization )

  1. Les objets sérialisés (dans le contexte d’ActiveRecord) sont donc des représentations d’objets texte/chaîne (codées avec YAML). Une fois sérialisé, vous pouvez enregistrer (presque) n'importe quel objet Ruby dans un seul champ de base de données.

  2. Vous pouvez utiliser la sérialisation si vous avez des objets assez complexes que vous devez enregistrer dans une base de données et que vous n'avez pas besoin de récupérer des enregistrements en fonction du contenu d'un attribut sérialisé. Je les utilisais par exemple pour stocker les préférences des utilisateurs d'une application Web: les préférences étaient essentiellement des hachages que je voulais enregistrer dans un seul champ de base de données.

3./4./5. Utilisez ActiveRecord :: Base.serialize comme suggéré par Marc-André Lafortune:

class User < ActiveRecord::Base
  serialize :preferences
end

u = User.new
u.preferences = {:show_tooltips => true, :use_extended_menu => false, ...}
u.save

# ...

u = User.find(23)
u.preferences # => {:show_tooltips => true, :use_extended_menu => false, ...}
52
severin

Vraiment facile. Vérifiez le doc pour ActiveRecord::Base.serialize .

8

Regardez MessagePack

2
astropanic

Si vous utilisez Rails 4 avec PostgreSQL, Rails 4 prend en charge le champ hstore qui peut stocker des hachages et permet également les requêtes. http://blog.remarkablelabs.com/2012/12/a-love-affair- with-postgresql-Rails-4-count-to-2013

0
Gogu