# Kind\_of? and superclass

**URL:** <https://www.ruby-forum.com/t/kind-of-and-superclass/190711>\
**Category:** Rails\
**Created:** [June 25, 2010, 2:25pm UTC](https://www.ruby-forum.com/t/kind-of-and-superclass/190711 "2010-06-25T14:25:35Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![onionwushu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/5daacb/32.png) [@onionwushu](https://www.ruby-forum.com/u/onionwushu)\
**Post date:** [June 25, 2010, 2:25pm UTC](https://www.ruby-forum.com/t/kind-of-and-superclass/190711/1 "2010-06-25T14:25:35Z")

</div>

Hi 🙂

In my application, I would like to know if a class is a subclass of  
ApplicationController, I mean, if a class is a controller.

I thought about this kind of code:

klass = classname  
while klass && klass != ApplicationController  
klass = klass.superclass  
end

It’s working well but I’m wondering if there is a way to use the ruby  
fonction kind\_of? to do it well.  
Actually, when I want to check if (for example) UsersController is a  
controller, I write: UsersController.kind\_of?(ApplicationController),  
but it doesn’t work at all. Do you have any ideas why ? Or do you know a  
better solution to handle it ?

Thanks 🙂  
Have a nice day

---

<div class="post-metadata">

**Author:** ![onionwushu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/5daacb/32.png) [@onionwushu](https://www.ruby-forum.com/u/onionwushu)\
**Post date:** [June 26, 2010, 2:35am UTC](https://www.ruby-forum.com/t/kind-of-and-superclass/190711/2 "2010-06-26T02:35:02Z")

</div>

On Fri, Jun 25, 2010 at 8:25 AM, onion wushu [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> end
> 
> It’s working well but I’m wondering if there is a way to use the ruby  
> fonction kind\_of? to do it well.  
> Actually, when I want to check if (for example) UsersController is a  
> controller, I write: UsersController.kind\_of?(ApplicationController),  
> but it doesn’t work at all. Do you have any ideas why ? Or do you know a  
> better solution to handle it ?

object.kind\_of?(class) tests if object is an instance of class or one  
of it’s superclasses, UserController is an instance of it’s metaclass  
so it isn’t an instance of ApplicationConrtroller or one of it’s  
subclasses.

Use the Module#\< method

UsersController \< ApplicationController

which returns true if the argument is one of the receivers ancestors,  
there is also Module#\<= which also returns true if the receiver is  
equal to the argument as well.

–  
Rick DeNatale

Blog: [http://talklikeaduck.denhaven2.com/](http://talklikeaduck.denhaven2.com/)  
Github: [rubyredrick (Rick DeNatale) · GitHub](http://github.com/rubyredrick)  
Twitter: @RickDeNatale  
WWR: [http://www.workingwithrails.com/person/9021-rick-denatale](http://www.workingwithrails.com/person/9021-rick-denatale)  
LinkedIn: [http://www.linkedin.com/in/rickdenatale](http://www.linkedin.com/in/rickdenatale)
