Necesito poner el primer carácter de cada palabra en mayúscula, y poner el resto en minúscula ...
manufacturer.MFA_BRAND.first.upcase
solo establece la primera letra en mayúscula, pero necesito esto:
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
split
se dividirá en el espacio de forma predeterminada, por lo que puede hacerlo aún más corto:'one TWO three foUR'.split.map(&:capitalize).join(' ')
.map(&:capitalize)
o al menos señalar en qué parte del documento lo encontró? No puedo encontrar ninguna referencia a eso. Además, ¿cuál es el trato con*' '
el final del segundo fragmento de código?&:method
sintaxismap
es una forma concisa de llamar a un método en cada elemento de la matriz . Luego puede llamarjoin
para convertir esa matriz en una cadena. El* ' '
es una forma alternativa de llamar a unirse . Puede pensar que multiplica los elementos de la matriz para crear una cadena.En rieles:
sin rieles:
sin Rails (cargue ActiveSupport de rails para parchear el método #titleize
String
)(algunos) casos de uso de cadenas manejados por #titleize
#titleize gotchas
Rails
titleize
convertirá cosas como guiones y guiones bajos en espacios y puede producir otros resultados inesperados, especialmente con situaciones sensibles a mayúsculas y minúsculas como lo señala @JamesMcMahon:porque está destinado a manejar código en camello como:
Para lidiar con este caso límite,
#downcase
primero puede limpiar su cadena antes de ejecutar #titleize. Por supuesto, si haces eso, eliminarás cualquier separación de palabras en camello:fuente
"hello world".titleize
que debería mostrar "Hola mundo".fuente
"One Two Three Fo Ur"
es diferente a la salida deseada en este caso, pero puede ser deseada en otros.Otra opción es usar una expresión regular y gsub, que toma un bloque:
fuente
.gsub(/\b\w/, &:capitalize)
conserva las mayúsculas previstas en palabras, por ejemplo, "Jane mcCollins"Mire el método de capitalización String #.
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
fuente
fuente
each
bloque se descarta. El!
está modificando las cadenas producidas porsplit
in-place. Sin el!
,capitalize
estaría creando una nueva cadena en mayúscula por iteración, y luego la descartaría de inmediato. El resultado final sería"hello world"
el mismo que la cadena original. Con el!
, cada cadena en lasplit
matriz 'd se está cambiando y, por lo tanto, el resultadoeach
es una matriz de cadenas en mayúscula.map
. Interesante truco sin embargo. PuntosSi está tratando de poner en mayúscula la primera letra de cada palabra en una matriz, simplemente puede poner esto:
array_name.map (&: capitalize)
fuente
Usé esto para un problema similar:
Esto maneja los siguientes casos extraños que vi probando las respuestas anteriores:
fuente