103 votes

Capitaliser uniquement le premier caractère de la chaîne et de laisser les autres tranquille? (Rails)

Je vais essayer d'obtenir des Rails pour mettre en majuscule le premier caractère d'une chaîne, et de laisser tous les autres de la façon dont ils sont. Je suis en cours d'exécution dans un problème où "je suis de New York" est transformé en "je suis de new york."

Quelle méthode dois-je utiliser pour sélectionner le premier caractère?

Merci

EDIT: j'ai essayé de mettre en œuvre ce que macek a suggéré, mais je suis un "undefined method `capitaliser'" erreur. Le code fonctionne très bien sans le tirer profit de la ligne. Merci pour l'aide!

def fixlistname!
  self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
  self.title[0] = self.title[0].capitalize
  errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with? 'You know you'
end

EDIT 2: ai Eu de travail. Merci pour l'aide!

EDIT 3: Attendez, non, je n'ai pas... Voici ce que j'ai dans ma liste modèle.

def fixlistname!
  self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
  self.title.slice(0,1).capitalize + self.title.slice(1..-1)
  errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with?  'You know you'
end

EDIT 4: Essayé macek de modifier, et de toujours obtenir un undefined method `capitaliser'" erreur. Que pouvais-je fait de mal?

def fixlistname!
  self.title = title.lstrip
  self.title += '...' unless title.ends_with?('...')
  self.title[0] = title[0].capitalize
  errors.add_to_base('Title must start with "You know you..."') unless title.starts_with?("You know you")
end

EDIT 5: C'est bizarre. Je suis en mesure de se débarrasser de la non défini erreur de méthode en utilisant la ligne ci-dessous. Le problème est qu'il semble remplacer la première lettre avec un numéro. Par exemple, au lieu de capitaliser les y dans Vous, il tourne le y dans un 121

self.title[0] = title[0].to_s.capitalize

131voto

Pascal Van Hecke Points 1619

Cela devrait le faire:

title = "test test"     
title[0] = title[0].capitalize
puts title # "Test test"

95voto

Taryn East Points 9698

Titleize tirera profit de chaque mot. Cette ligne se sent lourde, mais vous aurez la garantie que la seule lettre changé, c'est la première.

new_string = string.slice(0,1).capitalize + string.slice(1..-1)

Mise à jour:

irb(main):001:0> string = "i'm from New York..."
=> "i'm from New York..."
irb(main):002:0> new_string = string.slice(0,1).capitalize + string.slice(1..-1)
=> "I'm from New York..."

59voto

Bartuzz Points 265

Vous pouvez utiliser l'humaniser. Si vous n'avez pas besoin de traits de soulignement ou d'autres capitales dans vos lignes de texte.

Entrée:

"i'm from New_York...".humanize

Sortie:

"I'm from new york..."

55voto

Lasse Bunk Points 775
str = "this is a Test"
str.sub(/^./) { |m| m.upcase }
# => "This is a Test"

14voto

lmanners Points 955

Un objet orienté solution:

class String
  def capitalize_first_char
    self.sub(/^(.)/) { $1.capitalize }
  end
end

Ensuite, tu peux faire ça:

"i'm from New York".capitalize_first_char

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X