14

Jak wykorzystać pierwszą literę każdego świata w ciągu w Ruby on Rails:Jak wykorzystać pierwszą literę każdego słowa w ciągu

"goyette-xyz-is wide road".titleize returns "Goyette Xyz Is Wide Road". 

Chcę wyjście jak:

"goyette-xyz is wide road".SOME-FUNCTION should return "Goyette-xyz-is Wide Road". 

titleize usuwa podkreślenie i łączniki, ale chcę zachować je w łańcuchu.

+3

'„Goyette-xyz-jest szeroka droga”. split ('') .map (&: capitalize) .join ('') ' – apneadiving

+0

Skąd komputer powinien wiedzieć, że' Goyette', 'Wide' i' Road' to słowa, które powinny być pisane wielką literą, oraz 'xyz' i 'is' are not? Czy planujesz mieć bazę danych lub sztuczną inteligencję jako część tej metody? Powiedz nam, jakiego rodzaju AI używasz. W przeciwnym razie pytanie nie jest w pełni określone. – sawa

+0

@sawa Myślę, że OP chce traktować dzieloną część ('goyette-xyz-is') jako jedno słowo. – Stefan

Odpowiedz

6

Można wdrożyć właściwą metodę samemu:

class String 
    def my_titleize 
    split.map(&:capitalize).join(' ') 
    end 
end 

"goyette-xyz-is wide road".my_titleize 
#=> "Goyette-xyz-is Wide Road" 
+6

Nie rób małpich klas rdzeniowych !!!!!!!!!!!!!!!!!! – apneadiving

+1

@ Nieaktywne, czemu nie? poręcze dostały pęczek ich https://github.com/rails/rails/tree/feaa6e2048fe86bcf07e967d6e47b865e42e055b/activesupport/lib/active_support/core_ext – j03w

+1

@ j03w Railsowi rdzeniowi programiści mają doskonałą znajomość Rubiego. W rzeczywistości konwencje Rails są prawie częścią tego, czego deweloperzy Railsa oczekują od samej Ruby.Kiedy pracujesz z Railsami, to część podstaw, jeśli chcesz grać z foudnations, baw się dobrze, ale obawiaj się o swoją stabilność – apneadiving

1

Dodaj .capitalize sposób do łańcucha, aby uzyskać pierwszą dużą literą automatycznie.

36

można po prostu użyć .titleize jak ten "i want to make the first letter of each work into a cap".titleize

można dowiedzieć się więcej o titleize z apidocks

titleize (word) public

aktywuje wszystkie słowa i zastępuje kilka znaków w łańcuchu stworzyć ładniejszy tytuł. titleize służy do tworzenia ładnych wydruków. Nie jest używany w wewnętrznych Railsach.

titleize jest również aliasowane jako titlecase.

Przykłady:

"man from the boondocks".titleize # => "Man From The Boondocks" 
"x-men: the last stand".titleize # => "X Men: The Last Stand" 
"TheManWithoutAPast".titleize  # => "The Man Without A Past" 
"raiders_of_the_lost_ark".titleize # => "Raiders Of The Lost Ark" 

jak działa ta rzeczywistość

# File activesupport/lib/active_support/inflector/methods.rb, line 115 
def titleize(word) 
    humanize(underscore(word)).gsub(/\b('?[a-z])/) { $1.capitalize } 
end 

faktycznie należy "-" w pracach możemy dodać nową metodę do klasy String takiego.

# ./lib/core_ext/string.rb 
class String 
    #"goyette-xyz-is wide road".titleize_with_dashes#=> "Goyette-xyz-is Wide Road" 
    def titleize_with_dashes 
    humanize.gsub(/\b('?[a-z])/) { $1.capitalize } 
    end 
end 
+4

Chociaż ładnie wyjaśniające, jak działa titleize, to w rzeczywistości nie odpowiada na pytanie: jak tytułować, pozostawiając kreski. –

+0

Nie odpowiada na faktyczne pytanie. –

+0

@ DanishM. Właśnie dodałem aktualizację do mojego rozwiązania, mam nadzieję, że jego pomoc – MZaragoza

2

A jeśli tak jak dla mnie teraz trzeba wykorzystać pierwszą literę nawet przerywanymi słowy, można zrobić to tak:

def titleize_and_keep_dashes(text) 
    text.split.map(&:capitalize).join(' ').split('-').map(&:titleize).join('-') 
end 
titleize_and_keep_dashes("goyette-xyz-is wide road") 
# => "Goyette-Xyz Is Wide Road".