Understanding ruby .class and .ancestors methods Understanding ruby .class and .ancestors methods ruby ruby

Understanding ruby .class and .ancestors methods


For that you need to see how the Ruby object model looks.

Ruby object model diagram

That means the classes created using keyword class will always be the subclass of Object by default. Class is not the superclass of your class Order, rather it is an instance of class Class.Module#ancestors will include list of modules included in mod (including mod itself) and the superclass of your class Order.

class Order;endOrder.superclass # => ObjectOrder.superclass.superclass # => BasicObjectOrder.superclass.included_modules # => [Kernel]

So if you look at the output and understand the above code,then the below should now be clear to you:

Order.ancestors #-> [Order, Object, Kernel, BasicObject]

Now see,

class Order;endOrder.class # => ClassOrder.instance_of? Class # => trueOrder.class.superclass # => ModuleOrder.class.superclass.superclass # => ObjectOrder.class.superclass.superclass.included_modules # => [Kernel]

So if you look at the output and understand the above code, then the below should now be clear to you:

Order.class.ancestors #->[Class, Module, Object, Kernel, BasicObject]

That said Order.ancestors is giving you the ancestors of the class Order,whereas Order.class.ancestors is giving you the ancestors of the Class.