Tôi gặp vấn đề lạ khi một số mô hình nhất định trong công cụ đường ray mà tôi đang sử dụng đang được nhân bản trong không gian đối tượng.Lớp nhân bản trong không gian đối tượng 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
Khi điều này xảy ra, tôi không thể sử dụng is_a? hoặc kiểm tra bình đẳng để kiểm tra rằng một đối tượng là một thể hiện của lớp Field. Vấn đề chỉ xảy ra trong phát triển và có vẻ như nó có thể được gây ra bởi cache_classes bị tắt. Tôi nghĩ rằng các đối tượng từ yêu cầu trước đó vẫn còn trong không gian đối tượng nhưng tôi không chắc chắn làm thế nào để loại bỏ nó.
+1, điều này có vẻ không thể. Làm thế nào có thể có hai đối tượng liên kết với cùng một hằng số? 'Puts" # {klass.inspect}: # {klass.object_id} "nếu ...' đầu ra là gì? –
Lớp sắp xếp nào là 'DynamicFieldsets :: Field'? Nó đến từ đâu? –
DynamicFieldsets :: Field là một đối tượng ActiveRecord :: Base đến từ một engine ray. Khi bạn kiểm tra các lớp trong không gian đối tượng, chúng giống hệt nhau trừ đối tượng id. Bất kỳ phương pháp nào để kiểm tra xem liệu các giá trị này có bằng nhau hay không sẽ trả lại giá trị true, ngoại trừ các phương thức kiểm tra đối tượng, chẳng hạn như is_a? . – jeremiahishere