code: def assign_tp_self_caches(tp_ins)
        unless tp_self_caches.find { |tp_cache| tp_cache.object_id.equal? tp_ins.self.object_id }
          tp_self_caches.push tp_ins.self
        end
      end
docs: include? will evaluate @tp.self, if @tp.self is AR::Relation, it could cause problems
   So that's why I use object_id as replace