Ruby类对象强制重载

时间:2012-01-08 02:02:19

标签: ruby activerecord ruby-1.9.2

我正在尝试重现当我从ActiveRecord获取记录时发生的错误但是类(activeRecord类,而不是实例)不在内存中,然后重新加载activeRecord类模型。我没有抓到这个bug,因为看起来类对象在内存中保留了很长时间。

以下是测试:

def test_decryption_should_work_at_any_time
    require 'pry'
    binding.pry 
    account = Account.last 
    require 'pry'
    binding.pry
end

看一下,无论我尝试什么,你都会看到帐号是同一个对象:

   102:     f = Account.create!(:key => "secret", :password => "password")
 =>103:     binding.pry 
   104:     account = Account.last 
   105:     binding.pry
   106:   end
   107: end
[1] pry(#<ActiveRecordTest>)> f.class.object_id
=> 70278442281960

然后重新加载对象

  104:     account = Account.last 
 =>105:     binding.pry
   106:   end
   107: end
[1] pry(#<ActiveRecordTest>)> account.class.object_id
=> 70278442281960

不幸的是,类对象获取的帐户类对象与创建时相同。有没有办法强制重新加载这个类?

我知道bug在哪里,我只是想重现它。那么有没有办法卸载那个类?

1 个答案:

答案 0 :(得分:2)

不会在生产Rails代码中重新加载类。这是Rails开发模式的一个特性,即使这样,只有在需要时才重新加载类,而不是每次检查。

您的Account模型是否使用STI(单表继承)?我遇到过像你提到的问题(在运行时加载的类就像那样。