1. ホーム
  2. ruby-on-rails

[解決済み] 文字列の最初の文字だけを大文字にして、他はそのままにしますか?(Railsの場合)

2022-12-01 14:35:21

質問

Railsに文字列の最初の文字を大文字にし、他の文字はそのままにさせようとしています。私は、"i'm from New York" が "I'm from new york." になってしまう問題に遭遇しています。

最初の文字を選択するには、どのような方法をとればよいでしょうか。

ありがとうございます。

EDITです。 macekさんが提案されたものを実装してみたのですが、その際に "未定義のメソッド `capitalize'" エラーが発生します。コードはcapitalizeの行がなくても問題なく動作します。助けてくれてありがとうございます!

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: 動作するようになりました。ありがとうございました。

EDIT 3です。 待って、違うんです...。私のリストモデルにはこんなのがあります。

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: macekさんの編集を試してみましたが、やはり 未定義のメソッド `capitalize'" エラーが発生します。何が間違っているのでしょうか?

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: これは変ですね。下の行で未定義メソッドエラーは解消されました。問題は、最初の文字を数字に置き換えてしまうようなのです。例えば、大文字にする代わりに y あなた を、それは y を121に変換します。

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

どのように解決するのですか?

Titleize はすべての単語を大文字にします。 この行は重く感じますが、変更された文字が最初の1文字だけであることを保証します。

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

更新します。

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..."