Две незначительные проблемы, о которых я знаю:
Если вы наследуете модели и хотите переключиться с одной опечатки объекта на другую, то сначала вам нужно удалить ваш объект из карты идентификации, а затем создать новый объект. Пример:
class A < ActiveRecord::Base
end
class B < ActiveRecord::Base
end
a = A.create!
a.update_attribute :type, 'B'
b = B.find a.id
#=> #<A:...>
ActiveRecord::IdentityMap.remove(a) if ActiveRecord::IdentityMap.enabled?
b = B.find a.id
#=> #<B:...>
Другая небольшая проблема заключается в том, что карта идентичности может встречаться в тестах. Так как он не усекает свой репозиторий после каждого теста. Чтобы сделать это, нужно добавить это в конфигурации тестовой среды. Пример Rspec:
RSpec.configure do |config|
config.after :each do
DatabaseCleaner.clean
ActiveRecord::IdentityMap.clear
end
end
Мое мнение таково, что идентификационную карту можно использовать, но частично. Плохо включать его по умолчанию для каждого отдельного объекта, но будет полезно включить его для конкретных моделей. Скажем, у вас есть таблица языков, которая представляет собой довольно статичные данные или может быть по странам. Почему бы не загрузить их все на карту личности. Но с динамическими данными (например, пользователи или что-то другое, которые постоянно меняются) нет необходимости хранить их в памяти.