¿Cómo puedo obtener el nombre de la clase de un objeto ActiveRecord?
Yo tengo:
result = User.find(1)
Lo intenté:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Solo necesito el nombre de la clase, en una cadena ( User
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.
Object#class.inspect
da lo mismo queObject#class.name
, mientras que este no es el caso con los objetos ActiveRecord.Respuestas:
Desea llamar a .name en la clase del objeto:
fuente
result.class.name.split('::').last
result.class.name.demodulize
User.name
.User.to_s
También parece funcionar.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):
Si usa POR (plain-ol-Ruby):
fuente
Ambos
result.class.to_s
yresult.class.name
trabajo.fuente
Si desea obtener un nombre de clase desde un método de clase,
class.name
oself.class.name
no funcionará. Estos solo saldránClass
, ya que la clase de una clase esClass
. En cambio, puedes usarname
:salida:
fuente
En mi caso, cuando uso algo así
result.class.name
, tengo algo asíModule1::class_name
. Pero si solo queremosclass_name
, useresult.class.table_name.singularize
fuente