Как я могу получить имя класса из объекта ActiveRecord?
Я имею:
result = User.find(1)
Я старался:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Мне нужно только имя класса в строке ( User
в этом случае). Есть ли способ для этого?
Я знаю, что это довольно просто, но я искал документы как по Rails, так и по Ruby, но не смог найти.
Object#class.inspect
дает то же самоеObject#class.name
, что и в случае с объектами ActiveRecord.Ответы:
Вы хотите вызвать .name в классе объекта:
источник
result.class.name.split('::').last
result.class.name.demodulize
User.name
.User.to_s
тоже похоже на работу.Вот правильный ответ, извлеченный из комментариев Даниэля Риковского и Псейдемана. Я устала от того, что надо пролистывать комментарии, чтобы найти правильный ответ ...
Если вы используете Rails (ActiveSupport):
Если вы используете POR (plain-ol-Ruby):
источник
Оба
result.class.to_s
иresult.class.name
работают.источник
Если вы хотите получить имя класса из метода класса,
class.name
илиself.class.name
не будет работать. Они будут просто выводитьClass
, так как класс класса естьClass
. Вместо этого вы можете просто использоватьname
:вывод:
источник
В моем случае, когда я использую что-то вроде,
result.class.name
я получил что-то вродеModule1::class_name
. Но если мы только хотимclass_name
, используйтеresult.class.table_name.singularize
источник