Avendo uno strano problema in cui alcuni modelli di un motore di rotaie che sto utilizzando vengono duplicati nello spazio oggetti.Duplicazione della classe nello spazio oggetti 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
Quando ciò accade, non posso usare is_a? o controlli di uguaglianza per verificare che un oggetto sia un'istanza della classe Field. Il problema si verifica solo durante lo sviluppo e sembra che potrebbe essere causato da cache_classes disattivato. Penso che l'oggetto della richiesta precedente si trovi ancora nello spazio dell'oggetto, ma non sono sicuro di come rimuoverlo.
+1, questo sembra impossibile. Come possono esserci due oggetti legati alla stessa costante? Cosa fa "puts" # {klass.inspect}: # {klass.object_id} "if ..." output? –
Quale classe di ordinamento è 'DynamicFieldsets :: Field'? Da dove proviene? –
DynamicFieldsets :: Field è un oggetto ActiveRecord :: Base proveniente da un motore di rotaie. Quando si ispezionano le classi nello spazio oggetti, sono esattamente le stesse eccetto per l'ID oggetto. Qualsiasi metodo per verificare se sono uguali restituirà true tranne per quelli che controllano l'oggetto, ad esempio is_a? . – jeremiahishere