Muszę uczynić pierwszy znak każdego słowa wielką, a resztę małymi ...
manufacturer.MFA_BRAND.first.upcase
ustawia tylko pierwszą wielką literę, ale potrzebuję tego:
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
split
domyślnie podzieli się na przestrzeń, więc możesz ją skrócić:'one TWO three foUR'.split.map(&:capitalize).join(' ')
.map(&:capitalize)
lub przynajmniej wskazać, gdzie w dokumencie go znalazłeś? Nie mogę znaleźć żadnego odniesienia do tego. O co chodzi z tym*' '
na końcu drugiego fragmentu kodu?&:method
składnia wmap
jest zwięzłym sposobem wywołania metody dla każdego elementu tablicy . Następnie możesz wywołać,join
aby przekształcić tę tablicę w ciąg.* ' '
Jest alternatywnym sposobem zadzwonić przyłączyć . Można o tym myśleć jako o pomnożeniu elementów tablicy w celu utworzenia ciągu.W szynach:
bez szyn:
w / o Rails (załaduj ActiveSupport railsów do poprawki metody #titleize
String
)(niektóre) przypadki użycia ciągów obsługiwane przez #titleize
#titleize gotchas
Railsy
titleize
zamieniają takie rzeczy jak myślniki i podkreślenia na spacje i mogą dawać inne nieoczekiwane rezultaty, szczególnie w sytuacjach z rozróżnianiem wielkości liter, jak wskazał @JamesMcMahon:ponieważ jest przeznaczony do obsługi kodu w postaci wielbłąda, takiego jak:
Aby poradzić sobie z tym
#downcase
skrajnym przypadkiem, możesz najpierw wyczyścić ciąg przed uruchomieniem #titleize. Oczywiście, jeśli to zrobisz, usuniesz wszelkie separacje słów wielbłąda:źródło
"hello world".titleize
co powinno wyświetlić „Hello World”.źródło
"One Two Three Fo Ur"
które jest inne niż pożądane wyjście w tym przypadku, ale może być pożądane w innych.Inną opcją jest użycie wyrażenia regularnego i gsub, które przyjmują blok:
źródło
.gsub(/\b\w/, &:capitalize)
zachowuje zamierzone wielkie litery w słowach, np. „Jane mcCollins”Przyjrzyj się metodzie String # capitalize.
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
źródło
źródło
each
bloku jest odrzucana.!
Modyfikuje struny produkowane przezsplit
in-place. Bez!
,capitalize
byłoby utworzenie jednego nowego skapitalizowanych za ciąg iteracji, a następnie natychmiast odrzucając go. Ostateczny wynik byłby"hello world"
taki sam, jak oryginalny ciąg. W przypadku!
, każdy ciąg wsplit
tablicy 'd jest zmieniany, a zatem wynikiemeach
jest tablica ciągów pisanych wielkimi literami.map
. Ciekawy hack. PunktyJeśli próbujesz zacząć wielką literę każdego słowa w tablicy, możesz po prostu umieścić to:
nazwa_tablicy.map (&: wielkie litery)
źródło
Użyłem tego do podobnego problemu:
To rozwiązuje następujące dziwne przypadki, które widziałem, próbując poprzednich odpowiedzi:
źródło