Как получить название класса Ruby?
как я могу получить имя класса из объекта ActiveRecord?
Я:
result = User.find(1)
пробовал:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
мне нужно только имя класса в виде строки (User в данном случае). Есть ли способ для этого?
Я знаю, что это довольно просто, но я искал оба Rails и Ruby's docs, и я не мог найти его.
5 ответов
вот правильный ответ, извлеченный из комментариев Даниэля Риковского и pseidemann. Я устал от того, чтобы пропалывать комментарии, чтобы найти правильный ответ...
Если вы используете Rails (ActiveSupport):
result.class.name.demodulize
Если вы используете POR (plain-Ol-Ruby):
result.class.name.split('::').last
если вы хотите получить имя класса из метода класса,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