【发布时间】:2024-01-09 22:44:01
【问题描述】:
我遇到了一个奇怪的问题,我正在使用的 Rails 引擎中的某些模型在对象空间中被复制。
(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,这看起来不可能。怎么会有两个对象绑定到同一个常量?
puts "#{klass.inspect}: #{klass.object_id}" if ...输出什么? -
DynamicFieldsets::Field是什么排序类?它来自哪里? -
DynamicFieldsets::Field 是一个来自 rails 引擎的 ActiveRecord::Base 对象。当您检查对象空间中的类时,除了对象 ID 之外,它们完全相同。任何检查是否相等的方法都将返回 true,除了检查对象是否相等的方法,例如 is_a? .
-
+1 这很奇怪...@Matheus Moreira 说了什么
标签: ruby-on-rails ruby gem rails-engines