动态删除导轨模型

时间:2016-08-23 14:24:23

标签: ruby-on-rails

我试图动态创建和删除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

但它没有效果。

任何人都可以帮我解决这个问题吗? 谢谢 尼克

1 个答案:

答案 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 # => []