¿Cómo obtengo el nombre de una clase Ruby?
-
05-07-2019 - |
Pregunta
¿Cómo puedo obtener el nombre de la clase de un objeto ActiveRecord?
Tengo:
result = User.find(1)
Intenté:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Solo necesito el nombre de la clase, en una cadena ( Usuario
en este caso). ¿Hay algún método para eso?
Sé que esto es bastante básico, pero busqué en los documentos de Rails y Ruby, y no pude encontrarlo.
Solución
Desea llamar a .name en la clase del objeto :
result.class.name
Otros consejos
Aquí está la respuesta correcta, extraída de los comentarios de Daniel Rikowski y pseidemann. Estoy cansado de tener que revisar los comentarios para encontrar la respuesta correcta ...
Si usa Rails (ActiveSupport):
result.class.name.demodulize
Si usa POR (plain-ol-Ruby):
result.class.name.split('::').last
Tanto result.class.to_s
como result.class.name
funcionan.
Si desea obtener un nombre de clase desde un método de clase, class.name
o self.class.name
no funcionará. Estos solo generarán Class
, ya que la clase de una clase es Class
. En su lugar, puede usar name
:
module Foo
class Bar
def self.say_name
puts "I'm a #{name}!"
end
end
end
Foo::Bar.say_name
salida:
I'm a Foo::Bar!
En mi caso, cuando uso algo como result.class.name
obtuve algo como Module1 :: class_name
. Pero si solo queremos class_name
, use
result.class.table_name.singularize