Ответ 1
Вы хотите вызвать .name для класса объекта:
result.class.name
Как получить имя класса из объекта ActiveRecord?
У меня есть:
result = User.find(1)
Я пробовал:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Мне нужно только имя класса в строке (User
в этом случае). Есть ли способ для этого?
Я знаю, что это довольно просто, но я искал как Rails, так и Ruby docs, и я не смог его найти.
Вы хотите вызвать .name для класса объекта:
result.class.name
Вот правильный ответ, извлеченный из комментариев Даниэля Риковски и псевдомана. Я устал от необходимости сорвать комментарии, чтобы найти правильный ответ...
Если вы используете 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.class.table_name.singularize