我正在尝试让Rails大写字符串的第一个字符,并使所有其他字符保持原样。我遇到了一个问题,其中“我来自纽约”变成了“我来自纽约”。
我将使用哪种方法选择第一个字符?
谢谢
编辑:我试图实现macek建议,但我收到“未定义的方法'大写'”错误。没有大写行的代码工作正常。谢谢您的帮助!
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
编辑2:得到它的工作。谢谢您的帮助!
编辑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
编辑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
编辑5:这很奇怪。我可以使用下面的代码摆脱未定义的方法错误。问题在于它似乎用数字代替了第一个字母。例如,而不是资本的Ÿ在你,它把Ÿ为121
self.title[0] = title[0].to_s.capitalize
EDIT 3
,您需要从开始第2行self.title =
。同样,在所有3行中,您只需要self.title
在=
(等号)的左侧。在其他地方,您可以使用title
。有关示例,请参见我的答案中的编辑内容。