Как получить название класса Ruby?

как я могу получить имя класса из объекта ActiveRecord?

Я:

result = User.find(1)

пробовал:

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

мне нужно только имя класса в виде строки (User в данном случае). Есть ли способ для этого?

Я знаю, что это довольно просто, но я искал оба Rails и Ruby's docs, и я не мог найти его.

5 ответов


вы хотите позвонить .имя о классе объекта:

result.class.name

вот правильный ответ, извлеченный из комментариев Даниэля Риковского и pseidemann. Я устал от того, чтобы пропалывать комментарии, чтобы найти правильный ответ...

Если вы используете Rails (ActiveSupport):

result.class.name.demodulize

Если вы используете POR (plain-Ol-Ruby):

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

и result.class.to_s и result.class.name работа.


если вы хотите получить имя класса из метода класса,class.name или self.class.name не будет работать. Они будут просто выводить Class, так как класс класса Class. Вместо этого вы можете просто использовать name:

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

Foo::Bar.say_name

выход:

I'm a Foo::Bar!

в моем случае, когда я использую что-то вроде result.class.name У меня есть что-то вроде Module1::class_name. Но если мы только хотим class_name используйте

result.table_name.singularize