Je suis sérialisation d'un objet à un champ de base de données à l'aide de ActiveRecord: fonctionnalité sérialisation dans Ruby on RailsComment puis-je obtenir YAML :: load pour appeler const_missing?
class DrawElement < ActiveRecord::Base
...
serialize :content
end
La raison pour laquelle je sérialisation des objets est que je charger dynamiquement les types de disque à l'aide const_missing, donc Je n'ai pas besoin de configurer des tables de base de données pour eux.
def DrawElement.const_missing(const)
require File.join('draw_elements',const.to_s)
draw_class = const_get(const)
return draw_class if draw_class
raise "Draw Element not found #{const.to_s}"
end
Alors, quand je veux ajouter un élément de tirage au sort, je fais quelque chose comme ça dans irb
draw_element.content = DrawElement::Text.new
Tout fonctionne ici bien
Le problème est que lorsque je tente de charger l'objet de la base de données dans une nouvelle session, YAML::load
n'appelle jamais const_missing
pour exiger la définition de classe avant de charger le fichier. Donc tous mes objets @content
reviennent comme YAML::Object
Y a-t-il une meilleure façon de faire? J'essaye de pouvoir ajouter de nouveaux types sans devoir changer la base de données, ou avoir une relation has_many_polymorph
entre DrawElements et un document.
Ruby on Rails v.2.3.8, Ruby v. 1.8.7