2016-02-29 7 views
5

Co DSL z Ruby lub Railsów sformatuje ciąg znaków "mccdougal" na "McDougal", a jednocześnie pozostawi ciąg znaków "McDougal"?Jak prawidłowo formatować ciągi, takie jak "mccdougal" do "McDougal"

Przechodząc titleize do "McDougal" wyniki w następujących przypadkach:

"McDougal".titleize # => "Mc Dougal" 
+2

Prawidłowe rzeczą do zrobienia jest, aby użytkownik odpowiedzialny za formatowanie swoje nazwisko , a następnie nie miażdżąc go. –

Odpowiedz

4

Nie masz zamiar znaleźć coś poprawnie formatuje nazwę tak. Powodem jest to, że powodem, że M i D w McDougal są skapitalizowane, jest arbitralna sprawa regionalna. Jedyny sposób, w jaki mogę myśleć o zrobieniu czegoś takiego, jest przy pomocy tabeli odnośników. Powiedziałbym, że najlepiej programuje się programowo: "mcdougal".capitalize => "Mcdougal". Twierdzę, że nie można i nie należy zgadywać kapitalizacji regionalnych.

Jeśli jednak tworzysz aplikację dla Irlandczyków, i to absolutnie musi być zrobione. Zrobiłbym tabelę odnośników, aby rozwiązać problem. To nużące, ale znajdziesz skończoną liczbę przypadków.

+0

Byłem w połowie pisania prawie tej samej odpowiedzi, pokonałeś mnie :). – sameera207

5

Nie ma pomocnika Railsa według mojej wiedzy, który poradzi sobie z tą sprawą. Jest to niestandardowy przypadek krawędzi, który wymaga specjalnej obsługi. Można jednak utworzyć niestandardowy odbiór ciągów. Można upuścić ten kawałek kodu do inicjowania:

ActiveSupport::Inflector.inflections(:en) do |inflect| 
    inflect.human /mcdougal/, 'McDougal' 
end 

a następnie podczas rozmowy "mcdougal".humanize, dostaniesz "McDougal"

+0

Zobacz http://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html, aby uzyskać więcej dokumentacji na temat tego, jak to działa. –

+1

Jedynym problemem jest dodanie do nazwy każdej nazwy "Mc" we wszechświecie, ale działa w tym konkretnym przypadku. – tadman

+0

Prawda. Zastanawiam się, czy coś takiego jak 'inflect.human /mc(.*)/," MC# {$ 1} .titleize "może w cudowny sposób zadziałać. –

Powiązane problemy