我在名为hash_value
的活动记录类中有一个实例变量。这是一个序列化的哈希。
我想将哈希显示为XML。拨打hash_value.to_xml
是对的吗?许多节点都是数字,不允许XML标签只是数字(或以数字开头)。
我想覆盖to_xml
的{{1}}方法。我不想覆盖所有哈希值,只是覆盖此记录中的哈希值。
hash_value
我在这里尝试了答案redefining a single ruby method on a single instance with a lambda
但似乎并不适用。我怀疑是因为当我加载记录时,它会创建一个新的class ProductVersion < ActiveRecord::base
serialize :hash_value, Hash
def hash_value.to_xml
end
end
对象,因此原始单调调整没有实际意义。
任何想法都会很棒。 我知道我可以写一个函数hash_value_to_xml,但我宁愿避免做那样的事情。
感谢第一条评论,我想出了一个解决方案。不是一个好的,但有一个有效。我很想看看有没有更好的方法,因为这个闻起来有点儿。
hash_value
答案 0 :(得分:1)
我个人会选择hash_value_to_xml
路线。但是既然你坚持认为,这是一个可能有用的想法(没有测试过)
class ProductVersion < ActiveRecord::base
serialize :hash_value, Hash
alias_method :old_hash_value, :hash_value
def hash_value
h = old_hash_value
h.define_singleton_method(:to_xml) do
# your custom xml logic here
end
h
end
end
我们的想法是拦截从hash_value
返回的值并动态修补它。