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
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
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