我试图动态创建和删除rails模型。创作有效但不能删除。
我尝试将其删除为常量,但它仍然作为rails子类存在:
Object.send(:remove_const, :ModelToBeDeleted)
# Check it's gone from Object
Object.constants.include? :ModelToBeDeleted # => false
# But it is still in rails:
ActiveRecord::Base.subclasses
# returns
[ModelToBeDeleted(....)]
然后我尝试在终结器中使用回调,这在开发中重新加载时执行此操作:
ActiveSupport::DescendantsTracker.clear
ActiveSupport::Dependencies.clear
但它没有效果。
任何人都可以帮我解决这个问题吗? 谢谢 尼克
答案 0 :(得分:0)
类与常规对象一样进行垃圾收集 - 当没有引用它们时。
最常见的引用是常量和实例,也可能有常规引用。确保所有对课程的引用都消失了
class CLS; end
c = Class.new(CLS)
CLS.subclasses # => [#<Class:0x007fd64772dc68>]
obj = c.new
c = nil
GC.start
CLS.subclasses # => [#<Class:0x007fd64772dc68>]
obj = nil
GC.start
CLS.subclasses # => []