2012-01-08 48 views
1

我想重現一個當我從ActiveRecord獲取記錄但類(activeRecord類,而不是實例)不在內存中時發生的錯誤,然後重新加載activeRecord類模型。我沒有發現這個bug,因爲類對象似乎在內存中保留了很長時間。Ruby類對象強制重載

下面是測試:

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 

不幸的是,類對象獲取Account類的同一個對象的時候比它創建的時候要多。有沒有辦法強制這個類被重新加載?

我知道錯誤在哪裏,我只是想重現它。那麼有沒有辦法卸載這個類?

回答

2

類不會在生產Rails代碼中重新加載。這就是Rails開發模式的一個特點,即使只是需要時纔會重新加載類,而不是每次檢查。

您的Account模型使用STI(單表繼承)嗎?我遇到過類似於你提到的問題(在類似的實例中運行時加載的類)。