我想在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文件
答案 0 :(得分:2)
您可以使用以下方式更简单地完成此操作:
ActiveRecord::SessionStore::ClassMethods.module_eval do
def marshal(data)
// code
end
end
甚至更简单
module ActiveRecord::SessionStore::ClassMethods
def marshal(data)
// code
end
end
答案 1 :(得分:0)
您是否尝试过重新定义?
module ActiveRecord
class SessionStore
module ClassMethods
def marshal(data)
# Code
end
end
end
end