Je cherche des conseils généraux sur la sérialisation d'objets dans une base de données.
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 )
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.
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, ...}
Vraiment facile. Vérifiez le doc pour ActiveRecord::Base.serialize
.
Regardez MessagePack
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