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

304

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

У меня есть:

result = User.find(1)

Я пробовал:

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

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

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

  • 1
    @Oliver N .: С обычными объектами Ruby Object#class.inspect дает то же самое, что Object#class.name , тогда как с объектами ActiveRecord это не так.
Теги:
rails-activerecord

3 ответа

580
Лучший ответ

Вы хотите вызвать . name в классе объектов:

result.class.name
  • 3
    Когда я делаю это, я получаю имена модулей перед ним, поэтому "Module :: SubModule :: Class", есть ли способ получить просто "Class"
  • 23
    @Abe: result.class.name.split('::').last
Показать ещё 6 комментариев
91

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

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

result.class.name.demodulize

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

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

Работают как result.class.to_s, так и result.class.name.

  • 30
    Но концептуально #name возвращает имя, #to_s возвращает строковое представление, которое просто совпадает с именем. Я бы придерживался #name, просто из-за анальной сдержанности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню