0

我想覆盖 marshal方法,ActiveRecord但不确定如何为类中的模块内的方法做

module ActiveRecord
 class SessionStore < ActionDispatch::Session::AbstractStore
   module ClassMethods
      def marshal(data)
        ::Base64.encode64(Marshal.dump(data)) if data
      end
   end
 end
end

我试过这个config/initializers/active_record.rb

ActiveRecord::SessionStore.class_eval do
 ClassMethods.module_eval do
   def marshal(data)
      # Code
   end
 end
end

但它会引发错误

config/initializers/active_record.rb:2:in `block in <top (required)>': uninitialized constant ClassMethods (NameError)

编辑

我正在尝试覆盖config/initializers/active_record.rb,不想编辑 gem 文件

4

2 回答 2

2

您可以使用以下方法更简单地执行此操作:

ActiveRecord::SessionStore::ClassMethods.module_eval do
  def marshal(data)
    // code
  end
end

甚至更简单

module ActiveRecord::SessionStore::ClassMethods
  def marshal(data)
    // code
  end
end
于 2013-11-14T09:32:12.620 回答
0

您是否尝试过简单地重新定义?

module ActiveRecord
  class SessionStore
    module ClassMethods
      def marshal(data)
        # Code
      end
    end
  end
end
于 2013-11-14T09:28:57.583 回答