Я своего рода нуб, поэтому не считайте все, что я говорю, установленной истиной - но я думаю, что могу помочь.
вопрос 1
Не уверен, но я подозреваю, что эти цифры object_id
с ожидаемого класса. В ruby классы тоже являются объектами (хотя и одиночными объектами), поэтому они имеют object_id
, как и любой другой объект (вы можете вызвать object_id
для любого объекта, чтобы получить его уникальный идентификатор). Если вы хотите получить хэш каждого класса, загруженного в вашу среду вместе с их идентификатором, вы можете попробовать что-то вроде этого в консоли:
all_classes = ObjectSpace.each_object.select {|o| o.class == Class}
with_ids = Hash[ all_classes.map {|c| [c,c.object_id] } ]
вопрос 2
В консоли все классы отображаются с указанием полного пути к пространству имён, поэтому с помощью приведенного выше сценария вы сможете различить два ваших Character
класса, если они принадлежат другому пространству имён.
Однако, если пространство имен идентично, проблема может стать проблемной, потому что одно из вашего определения класса будет переопределять другое, в зависимости от порядка загрузки. Я не удивлюсь, если использование ri
в вашей оболочке поможет вам найти драгоценный камень преступника в этом случае.
вопрос 3
Я бы сказал: избегайте расплывчатых, слишком распространенных названий для ваших моделей; но в этом случае я бы сказал, что драгоценный камень виноват, потому что тот, кто предоставляет драгоценный камень, должен быть очень осторожен, чтобы не загрязнять пространство имен, особенно если оно загрязняет пространство имен ActiveRecord::Base
.