레일즈 엔진의 특정 모델이 오브젝트 공간에서 중복되는 이상한 문제가 있습니다.오브젝트 공간에서 클래스 복제하기
(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이 보이지 않습니다. 같은 상수에 바인딩 된 두 개의 객체가있을 수 있습니까? # {klass.inspect}는 무엇을 "puts"합니까? # {klass.object_id} "if ..."출력은 무엇입니까? –
어떤 종류의 클래스'DynamicFieldsets :: Field'입니까? 그거 어디서 났어? –
DynamicFieldsets :: Field는 레일 엔진에서 오는 ActiveRecord :: Base 객체입니다. 오브젝트 공간에서 클래스를 조사 할 때 오브젝트 ID를 제외하고는 클래스가 동일합니다. is_a와 같이 객체를 검사하는 메소드를 제외하고 is가 동일한 지 확인하는 메소드는 true를 반환합니다. . – jeremiahishere