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
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
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