私が使用しているレールエンジンの特定のモデルがオブジェクト空間で重複しているという奇妙な問題があります。オブジェクト空間のクラスの複製object_id
(rdb:1) ObjectSpace.each_object(::Class).each { |klass| puts klass.to_s + ": " + klass.object_id.to_s if klass.to_s.eql?("DynamicFieldsets::Field") }
DynamicFieldsets::Field: 66866100
DynamicFieldsets::Field: 71836380
2479
この場合、is_aは使用できません。オブジェクトがFieldクラスのインスタンスであるかどうかをテストします。この問題は開発時にのみ発生し、cache_classesがオフになっている可能性があります。以前のリクエストのオブジェクトはオブジェクト空間に残っていると思いますが、削除する方法がわかりません。
+1これは不可能です。同じ定数にバインドされた2つのオブジェクトはどのようにありますか? #{klass.inspect}は何を 'puts 'するのですか?#{klass.object_id}" if ... "出力しますか? –
'DynamicFieldsets :: Field'とはどんなソートクラスですか?それはどこから来たのですか? –
DynamicFieldsets :: Fieldは、レールエンジンから来るActiveRecord :: Baseオブジェクトです。オブジェクト空間のクラスを検査するとき、オブジェクトIDを除いてまったく同じです。等しいかどうかをチェックするメソッドは、is_aなど、オブジェクトをチェックするメソッドを除いてtrueを返します。 。 – jeremiahishere