ginge nicht auch <code>ancestors.include?(self)</code> statt <code>(parent == self || parent.ancestors.include?(self))</code> ?