ruby-on-rails - query - rails find
¿Cómo obtengo el nombre de una clase de Ruby? (5)
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 utiliza Rails (ActiveSupport):
result.class.name.demodulize
Si usas POR (plain-ol-Ruby):
result.class.name.split(''::'').last
¿Cómo puedo obtener el nombre de 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 un método para eso?
Sé que esto es bastante básico, pero busqué los documentos de Rails y de Ruby, y no pude encontrarlos.
En mi caso, cuando uso algo como result.class.name
obtuve algo como Module1::class_name
. Pero si solo queremos class_name
, usa
result.table_name.singularize
Quieres llamar a .name en la clase del objeto:
result.class.name
Si desea obtener un nombre de clase dentro de un método de clase, class.name
o self.class.name
no funcionarán. Estos solo generarán Class
, ya que la clase de una clase es Class
. En su lugar, puedes usar el 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!
Tanto result.class.to_s
como result.class.name
funcionan.