Ruby on Rails标题化连字符名称

时间:2015-04-21 23:17:55

标签: ruby-on-rails ruby

Rails titleize方法删除连字符,而大写方法不会将连字符后的单词大写。我想要跟随(通过编写方法):

"mary-joe spencer-moore" => "Mary-Joe Spencer-Moore"
"mary-louise o'donnell" => "Mary-Louise O'Donnell"

3 个答案:

答案 0 :(得分:16)

Check Titelize implementation,你可以得到:

"mary-joe spencer-moore".humanize.gsub(/\b('?[a-z])/) { $1.capitalize }

会给你=> “Mary-Joe Spencer-Moore”

你可以在字符串类中编写一个函数,添加到intalizers:

class String
  def my_titleize
    humanize.gsub(/\b('?[a-z])/) { $1.capitalize }
  end
end

然后从您的代码:

"mary-joe spencer-moore".my_titleize

答案 1 :(得分:7)

您还可以通过拆分字符串并分别标题化部分来获得所需的结果:

"mary-louise o'donnell".split('-').map(&:titleize).join('-')

答案 2 :(得分:0)

 %q%mary-louise o'donnell%.gsub(/\b([a-z])/) { $1.capitalize }
 => "Mary-Louise O'Donnell"

但是,如果您输入的字母大写不正确(例如“ MARY-LOUISE O'DONNELL”),则首先需要.downcase;此外,如果您的姓氏和名字可能有nil个值,然后又将它们加入,那么您将需要.strip

[first_name, last_name].join(' ').downcase.gsub(/\b([a-z])/) { $1.capitalize }.strip