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.#classify
lugar."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_user
aAppUser
(noApp_user
), de ahí esta respuesta.fuente
classify
devuelve una cadena, debe llamarconstantize
después para convertirla en una clase real.classify
es que las cadenas Pluralizado se convertirán en singular ...'age_in_years'.classify
se convierte enAgeInYear
4.2.11
Fuente: 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] }.join
Punto 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
:class
modo es una copia de @ user3869936, el:method
modo que no veo en ninguna otra respuesta aquí.El resultado es:
fuente
PascalCase
es 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:method
versión fuera ladowncase
primera, de modo que pueda usarse en amboslower_snake_case
yUPPER_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}
gsub
solución, parece que es más lenta en comparación con lamap
solució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
.camelize
fuente