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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top