2015-04-21 15 views
5

Rails titellize Methode entfernt Bindestrich, und Großbuchstabe Methode macht das Wort nicht kommt nach Bindestrich. Ich wollte so etwas wie folgt (durch ein Verfahren zu schreiben):Ruby on Rails Titizeize Bindestrichname

"mary-joe spencer-moore" => "Mary-Joe Spencer-Moore" 
"mary-louise o'donnell" => "Mary-Louise O'Donnell" 
+0

eine Methode schreiben? –

Antwort

13

Check Titelize implementation und von ihm können Sie erhalten:

"mary-joe spencer-moore".humanize.gsub(/\b('?[a-z])/) { $1.capitalize } 

werden Sie geben => "Mary-Joe Spencer-Moore"

und Sie können eine Funktion für sie in String-Klasse schreiben, in dem intalizers:

class String 
    def my_titleize 
    humanize.gsub(/\b('?[a-z])/) { $1.capitalize } 
    end 
end 

und dann von Ihrem Code:

"mary-joe spencer-moore".my_titleize 
+0

Danke @ mohamed-stark noch eine Frage. Können wir es allgemein verwenden, Namen wie O'Brien, O'Connor? – kangkyu

+0

Ja, sicher, Sie müssen die Regex ändern, um das Zeichen nach Doppelpunkt in Regex-Capture zu sein, um es zu kapitalisieren. –

+0

Danke aber, um klar zu machen, könnte ich diesen Regex oder Arbeitscode für eine Methode haben, um ein "mary-louise o'donnell" => "Mary-Louise O'Donnell" zu machen? – kangkyu

5

Sie können auch das gewünschte Ergebnis erhalten, indem die Zeichenfolge und titleizing die Abschnitte separat Aufspaltung:

"mary-louise o'donnell".split('-').map(&:titleize).join('-') 
+0

Das funktioniert aber nach einigem Benchmark .mess scheint es 3 mal langsamer als die andere Methode zu sein. Nun ... es ist aber nicht so wichtig, denn ein Durchschnitt von 9,214543926410341e-05s ist immer noch sehr gut. – Kulgar

+0

Ja, ich mag die Prägnanz dieser Lösung. Wenn Sie versuchen, Gigabyte Text zu verarbeiten, möchten Sie möglicherweise eine optimierte, weniger präzise Lösung verwenden. Hängt von Ihrem Anwendungsfall ab. – gabeodess