How do I get the name of a Ruby class?

Ruby on-RailsRubyRails Activerecord

Ruby on-Rails Problem Overview


How can I get the class name from an ActiveRecord object?

I have:

result = User.find(1)

I tried:

result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"

I need only the class name, in a string (User in this case). Is there a method for that?

I know this is pretty basic, but I searched both Rails' and Ruby's docs, and I couldn't find it.

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

You want to call .name on the object's class:

result.class.name

Solution 2 - Ruby on-Rails

Here's the correct answer, extracted from comments by Daniel Rikowski and pseidemann. I'm tired of having to weed through comments to find the right answer...

If you use Rails (ActiveSupport):

result.class.name.demodulize

If you use POR (plain-ol-Ruby):

result.class.name.split('::').last

Solution 3 - Ruby on-Rails

Both result.class.to_s and result.class.name work.

Solution 4 - Ruby on-Rails

If you want to get a class name from inside a class method, class.name or self.class.name won't work. These will just output Class, since the class of a class is Class. Instead, you can just use name:

module Foo
  class Bar
    def self.say_name
      puts "I'm a #{name}!"
    end
  end
end

Foo::Bar.say_name

output:

I'm a Foo::Bar!

Solution 5 - Ruby on-Rails

In my case when I use something like result.class.name I got something like Module1::class_name. But if we only want class_name, use

result.class.table_name.singularize

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionandiView Question on Stackoverflow
Solution 1 - Ruby on-RailsflickenView Answer on Stackoverflow
Solution 2 - Ruby on-RailsDarren HicksView Answer on Stackoverflow
Solution 3 - Ruby on-RailstalView Answer on Stackoverflow
Solution 4 - Ruby on-RailsjayhendrenView Answer on Stackoverflow
Solution 5 - Ruby on-RailsChivorn KouchView Answer on Stackoverflow