После прочтения исходного кода active_record я обнаружил, что var «employee» является экземпляром класса «ActiveRecord :: Associations :: HasManyAssociation» (<«ActiveRecord :: Associations :: AssociationCollection» <«ActiveRecord :: Associations: : AssociationProxy ") собственно. Фактически, они отменяют определение практически любых методов (включая «методы», «класс» и т. Д.) В AssociationProxy, добавив следующую строку кода: </p>
instance_methods.each { |m| undef_method m unless m.to_s =~ /^(?:nil\?|send|object_id|to_a)$|^__|^respond_to_missing|proxy_/ }
и они используют целевой объект (в моем случае это экземпляр Array) для делегирования методов "undef", а методы response_to? И т. Д. Делегируются объекту "proxy", который имеет " create / build "method.So" employee.respond_to?: create "возвращает true, но список методов, возвращаемый при вызове метода" employee.methods ", не содержит метод create.