2010-11-22 3 views
0

Я сериализации объекта в поле базы данных с помощью ActiveRecord-х: сериализации функциональность в Ruby On RailsКак я могу получить YAML :: load для вызова const_missing?

class DrawElement < ActiveRecord::Base 
... 
    serialize :content 

end 

Причина я сериализации объектов является то, что я динамически загружаются типы с диска с помощью const_missing, так Мне не нужно настраивать таблицы баз данных.

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 

Так что, когда я хочу добавить раздаточный элемент, я делаю что-то подобное в irb

draw_element.content = DrawElement::Text.new 

Все здесь прекрасно работает

Проблема заключается в том, что, когда я пытаюсь загрузить объект из базы данных в новом сеансе YAML::load никогда не вызывает const_missing, чтобы потребовать определения класса перед загрузкой файла. Итак, все мои @content объектов возвращаются как YAML::Object

Есть ли лучший способ сделать это? Я пытаюсь добавить новые типы без необходимости изменять базу данных или иметь связь has_many_polymorph между чертежами и документом.

Рубин на Rails v.2.3.8, Ruby v. 1.8.7

ответ

0

Из моего опыта YAML::load возвращает хэш. Это зависит от меня, чтобы пройти через хэш и сделать что-то с его содержанием. Ни load, ни load_file не принимают блок, чтобы войти в них и влиять на то, как анализируется документ YAML.

Вы можете попробовать испортить load_documents или each_document, хотя они берут блок, но я не знаю, могли бы вы добавить дополнительные элементы хэша таким образом.

Смежные вопросы