2015-04-21 119 views
5

Rails titleize方法删除连字符,并且大写方法不会大写连字符后面的单词。我想类似以下内容(通过编写一个方法):Ruby on Rails标题名称

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

写的方法? –

回答

13

Check Titelize implementation,并从中你可以得到:

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

会给你=>“玛丽 - 乔·斯宾塞 - 穆尔”

,你可以在字符串类写一个函数吧,加入intalizers:

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

,然后从你的代码:

"mary-joe spencer-moore".my_titleize 
+0

谢谢@穆罕默德 - 斯塔克还有一个问题。我们能否更普遍地使用它,比如O'Brien,O'Connor? – kangkyu

+0

是的,当然你需要修改正则表达式来匹配冒号后的charcter,以便在正则表达式捕获中利用它。 –

+0

谢谢,但是,为了说清楚,我是否可以获得该方法的正则表达式或工作代码来执行“玛丽 - 路易丝奥唐奈”=>“玛丽 - 路易斯奥唐奈”? – kangkyu

5

你也可以得到通过拆分您的字符串,并分别titleizing的部分所期望的结果:

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

这样做有效,但是在一些Benchmark测量它似乎比其他方法慢3倍。那么......这并不重要,因为平均9.214543926410341e-05s仍然非常好。 – Kulgar

+0

是的,我喜欢这个解决方案的简洁。如果您正在尝试处理千兆字节的文本,则可能需要使用更优化的简洁解决方案。取决于你的用例。 – gabeodess