Estoy tratando de convertir un nombre de serpiente a camello. ¿Hay algún método incorporado?
Por ejemplo: "app_user"a"AppUser"
(Tengo una cadena "app_user"que quiero convertir eso a modelo AppUser).
ruby-on-rails
ruby
string
Lohith MV
fuente
fuente

ruby-on-rails, así que supongo que no es un problema. Pero gracias por mencionarlo.#classifylugar."some_namespace/module/class_name".classify => "SomeNamespace::Module::ClassName"require "active_support/core_ext/string"es suficiente, siempre que Rails ya esté instalado.¿Que tal este?
Encontrado en los comentarios aquí: clasificar una cadena de Ruby
Ver comentario de Wayne Conrad
fuente
Si usa rieles, use
classify. Maneja bien los casos de borde.Nota:
Esta respuesta es específica de la descripción dada en la pregunta (no es específica del título de la pregunta). Si uno está tratando de convertir una cadena a camello, debe usar la respuesta de Sergio . El interrogador afirma que quiere convertirse
app_useraAppUser(noApp_user), de ahí esta respuesta.fuente
classifydevuelve una cadena, debe llamarconstantizedespués para convertirla en una clase real.classifyes que las cadenas Pluralizado se convertirán en singular ...'age_in_years'.classifyse convierte enAgeInYear4.2.11Fuente: http://rubydoc.info/gems/extlib/0.9.15/String#camel_case-instance_method
Para fines de aprendizaje:
Y para la variante lowerCase:
fuente
self.split('_').inject([]){ |buffer,e| buffer + [buffer.empty? ? e : e.capitalize] }.joinPunto de referencia para soluciones puras de Ruby
Aproveché todas las posibilidades que tenía en mente para hacerlo con código ruby puro, aquí están:
capitalizar y gsub
dividir y mapear usando
&taquigrafía (gracias a la respuesta del usuario 3869936)división y mapa (gracias a la respuesta del Sr. Black)
Y aquí está el punto de referencia para todos estos, podemos ver que gsub es bastante malo para esto. Usé 126 080 palabras.
fuente
Llegué buscando el inverso de tu pregunta, pasando de un caso de camellos a un caso de serpientes. Use guión bajo para eso (no decamelizar):
AppUser.name.underscore # => "app_user"o, si ya tiene una cadena de camello:
"AppUser".underscore # => "app_user"o, si desea obtener el nombre de la tabla, probablemente es por eso que desea el caso de la serpiente:
AppUser.name.tableize # => "app_users"fuente
AppUser.table_name? También se asegurará de tener el verdadero nombre de la tabla si no es app_users, sino algo definido en otra parte.Me siento un poco incómodo para agregar más respuestas aquí. Decidí optar por el enfoque de rubí puro más legible y mínimo, sin tener en cuenta el buen punto de referencia de @ ulysse-bn. Si bien el
:classmodo es una copia de @ user3869936, el:methodmodo que no veo en ninguna otra respuesta aquí.El resultado es:
fuente
PascalCasees un subconjunto deCamelCase. También esto es lo que sabía: ese caso de camello se aplicaba a ambos. Pero nunca he investigado. Sin embargo, gracias por mencionar PascalCase. en.wikipedia.org/wiki/Camel_case:methodversión fuera ladowncaseprimera, de modo que pueda usarse en amboslower_snake_caseyUPPER_SNAKE_CASE.La mayoría de los otros métodos enumerados aquí son específicos de Rails. Si quieres hacer esto con Ruby puro, la siguiente es la forma más concisa que se me ocurrió (gracias a @ ulysse-bn por la mejora sugerida)
fuente
x.gsub(/(?:_|^)(\w)/){$1.upcase}gsubsolución, parece que es más lenta en comparación con lamapsolución.Extienda la cadena para agregar Camelize
En Ruby puro, podría extender la clase de cadena utilizando exactamente el mismo código de Rails
.camelizefuente