Preciso fazer o primeiro caractere de cada palavra em maiúsculas e o restante em minúsculas ...
manufacturer.MFA_BRAND.first.upcase
está definindo apenas a primeira letra maiúscula, mas preciso disso:
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
split
irá dividir em espaço por padrão, para que você possa torná-lo ainda mais curto:'one TWO three foUR'.split.map(&:capitalize).join(' ')
.map(&:capitalize)
ou pelo menos apontar para onde, no documento, você o encontrou? Não consigo encontrar nenhuma referência a isso. Além disso, qual é o problema*' '
no final do segundo trecho de código?&:method
sintaxemap
é uma maneira concisa de chamar um método para cada item da matriz . Você pode ligarjoin
para transformar essa matriz em uma string. O* ' '
é uma forma alternativa para chamar juntar . Você pode pensar nisso como multiplicar os itens da matriz para criar uma sequência.No Rails:
sem trilhos:
sem Rails (carregue o ActiveSupport do Rails para corrigir o método #titleize
String
)(alguns) casos de uso de string tratados por #titleize
#titleize dicas
O Rails
titleize
converterá coisas como traços e sublinhados em espaços e poderá produzir outros resultados inesperados, especialmente em situações que diferenciam maiúsculas de minúsculas, como apontado por @JamesMcMahon:porque se destina a lidar com código de camelo, como:
Para lidar com esse caso de borda, limpe sua string
#downcase
antes de executar #titleize. Obviamente, se você fizer isso, eliminará todas as separações de palavras com cameloCased:fonte
"hello world".titleize
que deve exibir "Hello World".fonte
"One Two Three Fo Ur"
é diferente da saída desejada neste caso, mas pode ser desejada em outros.Outra opção é usar um regex e gsub, que aceita um bloco:
fonte
.gsub(/\b\w/, &:capitalize)
conservas destina capitalização dentro das palavras, por exemplo, "Jane mcCollins"Olhe para o método String # capitalize.
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
fonte
fonte
each
bloco está sendo descartado. O!
está modificando as seqüências produzidas pelosplit
local. Sem o!
,capitalize
seria criar uma nova cadeia de caracteres em maiúsculas por iteração e descartá-la imediatamente. O resultado final seria"hello world"
exatamente o mesmo que a string original. Com o!
, cada cadeia de caracteres nasplit
matriz 'd está sendo alterada e, portanto, o resultado deeach
é uma matriz de cadeias de caracteres maiúsculas.map
. Corte interessante embora. PontosSe você estiver tentando colocar em maiúscula a primeira letra de cada palavra em uma matriz, basta colocar o seguinte:
array_name.map (&: capitalizar)
fonte
Eu usei isso para um problema semelhante:
Isso lida com os seguintes casos estranhos que vi tentando as respostas anteriores:
fonte