Rails doesn't load classes on deserializing YAML/Marshal objects

前端 未结 5 825
离开以前
离开以前 2020-12-16 02:32
  • Rails: 3.0.3
  • Ruby: 1.9.2

Trying to deserialize a very simple object using YAML.load or Marshal.load produces a corru

5条回答
  •  执笔经年
    2020-12-16 02:35

    To automatically require classes on YAML loading in the manner @fguillen suggests is elegant, I wrote this short monkey-patch.

    It simply attempts to require_dependency any class the Psych ToRuby class resolves to classes.

    Works for me in a serialised Active Record that stores a custom class instance, YMMV.

    module Psych::Visitors
      ToRuby.class_eval do
        alias :resolve_class_without_autoload :resolve_class
        def resolve_class klassname
          begin
            require_dependency klassname.underscore 
          rescue NameError, LoadError
          end
          resolve_class_without_autoload klassname
        end
      end
    end
    

提交回复
热议问题