2012-01-08 16 views
1

ActiveRecordからレコードを取得してもクラス(インスタンスではなくactiveRecordクラス)がメモリにない場合に発生するバグを再現しようとしています。次に、activeRecordクラスモデルがリロードされます。クラスオブジェクトがかなりの間メモリに残っているようだから、私はバグを捕まえなかった。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 

残念ながら、クラスオブジェクトが作成されたときと同じクラスオブジェクトがアカウントクラスに対して取得されています。このクラスを強制的にリロードする方法はありますか?

私はバグの場所を知っています。私はそれを再現しようとしています。そのクラスをアンロードする方法はありますか?

答えて

2

クラスは本番用のRailsコードでリロードされません。これは特にRailsの開発モードの特長であり、クラスであっても、各検査ではなく、必要なときに再ロードされます。

AccountモデルでSTI(単一テーブル継承)を使用していますか?私はあなたが言及しているような問題を経験しました(クラスは実行時にそのようなインスタンスでロードされます)。

関連する問題