У меня возникла проблема при попытке сравнить две модели Rails. Они должны оцениваться как одинаковые, но то, как ActiveRecord реализует ==, приводит к сбою. Что еще более странно, так это прохождение модульных тестов.
Предположим, у пользователя много сообщений, а в сообщениях много комментариев. Пользователь также имеет множество комментариев.
(и это сравнивает два объекта, которые должны быть одинаковыми)
User.first.comments.first == Post.forst.comments.first
Когда я записываю object_ids в Rails.logger, они не равны. После просмотра исходного кода я обнаружил, что это условие приводит к сбою.
http://github.com/rails/rails/blob/30dcac292606da0e031d1e0dfbb6fc6109e5da60/activerecord/lib/active_record/base.rb#L1602
Я ожидаю:
User.first.comments.class.object_id == Post.first.comments.class.object_id
Но это не тот случай.
Модель включает в себя модуль, который выполняет следующие действия внутри себя. Включено (база)
base.send :include, InstanceMethods
base.send :extend, ClassMethods
Когда я беру включение из моделей, все работает нормально.
Есть ли что-то с шаблоном включения / расширения, которое вызывает перезагрузку моделей или их неправильное кэширование в рамках одного и того же запроса?
Любые идеи здесь были бы великолепны !!!