I am trying to get the name of the class from within a static method within the class:
class A
def self.get_class_name
self.class.name.underscore.capitalize.constantize
end
end
Though this returns Class instead of A. Any thoughts on how do I get A instead?
Eventually I also want to have a class B that inherits from A that will use the same method and will return B when called.
The reason I am doing this is because I have another object under this domain eventually: A::SomeOtherClass
which I want to use using the result I receive.
Remove .class
:
class A
def self.get_class_name
self.name.underscore.capitalize.constantize
end
end
self
in a context of a class (rather than the context of an instance method) refers to the class itself.
This is why you write def self.get_class_name
to define a class method. This means add method get_class_name
to self
(aka A
). It is equivalent to def A.get_class_method
.
It is also why when you tried self.class.name
you got Class
- the Object#class
of A
is Class
.
To make this clearer, consider the output of:
class A
puts "Outside: #{self}"
def self.some_class_method
puts "Inside class method: #{self}"
end
def some_instance_method
puts "Inside instance method: #{self}"
end
end
A.some_class_method
A.new.some_instance_method
Which is:
Outside: A
Inside class method: A
Inside instance method: #<A:0x218c8b0>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With