web-dev-qa-db-fra.com

Rails 3 - Comment créer un objet JSON à stocker dans la base de données

Je crée un observateur AuditLog qui surveille plusieurs modèles.

J'aimerais que l'observateur ait un after_create, qui crée un objet JSON qui est stocké dans une colonne de base de données. Il contiendra des données comme {photoid: 123, photoname: "asdasd", creator_id: "asdasd"} etc etc ...

Dans Rails, comment puis-je créer ce type d'objet JSON, puis comment l'insérer dans la base de données avec d'autres champs non JSON?

Merci

31
AnApprentice

Les versions actuelles de Rails prennent en charge la sérialisation json prête à l'emploi. Définissez votre champ en tant que chaîne (ou texte) dans la migration, puis:

class Foo < ActiveRecord::Base
  serialize :field, JSON
end

bar = Foo.new
bar.field = [1,2,3]
bar.save
62
Matt Connolly

Tout d'abord, vérifiez définitivement la sérialisation d'ActiveRecord et voyez si elle fait ce dont vous avez besoin: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-serialize

Cependant, si vous avez spécifiquement besoin de JSON (la sérialisation utilise YAML par défaut), vous pouvez toujours le simuler à la main.

Vous pouvez simplement créer un hachage dans Ruby puis appeler to_json dessus avant de l'attribuer à votre attribut de modèle.

data = { 'photoid' => 123, 'photoname' => "asdasd", 'creator_id' => "asdasd" }
myrecord.stored_data = data.to_json
myrecord.save
10
tfe