Как получить название класса 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