2012-09-10 16 views
7

Estoy construyendo una aplicación con Ruby 1.9.3 y Rails 3.0.9¿Cómo obtener un nombre de clase legible en Ruby on Rails?

Tengo una clase como la siguiente.

module CDA 
    class Document 
    def humanize_class_name 
     self.class.name.gsub("::","") 
    end 
    end 
end 

Quiero el nombre de clase como "CDADocument".

¿Mi método humanize_class_name es la forma correcta de lograr esto?

O

Cualquier otra construida en los métodos disponibles con rieles?

Respuesta

1

Creo que Rails podría tener algo similar, pero dado que la forma que desea es peculiar, tendrá que diseñar el método usted mismo. La posición donde la defines es incorrecta. Tendría que hacer eso para cada clase. En cambio, debes definirlo en la clase Class.

class Class 
    def humanize_class_name 
     name.delete(":") 
    end 
end 
some_instance.class.humanize_class_name #=> the string you want 

o

class Object 
    def humanize_class_name 
     self.class.name.delete(":") 
    end 
end 
some_instance.humanize_class_name #=> the string you want 
+0

FYI, 'tr' es de aproximadamente 3,5 veces más rápido aquí que' gsub'. –

+0

@AndrewMarshall Sabía que 'tr' era más rápido, pero no sabía que podía poner cadena vacía como reemplazo. Gracias. – sawa

+1

¿Qué pasa con 'delete (": ")'? – Stefan