我知道你可以这样做:
"SomeWordHere".underscore.gsub("_", " ")
得到“这里的一些词”。
我认为对于这么简单的事情来说可能有点太多了。是否有更有效的方法(可能是内置方法?)将“SomeWordHere”转换为“某些字在这里”?
答案 0 :(得分:22)
方法下划线和人性化是专为表格,类/包名称等之间的转换而设计的。您最好使用自己的代码进行替换以避免惊喜。见评论。
"SomeWordHere".underscore => "some_word_here"
"SomeWordHere".underscore.humanize => "Some word here"
"SomeWordHere".underscore.humanize.downcase => "some word here"
答案 1 :(得分:9)
我认为这是一个更简单的解决方案:
"SomeWordHere".titleize.downcase
答案 2 :(得分:5)
您可以使用正则表达式:
puts "SomeWordHere".gsub(/[a-zA-Z](?=[A-Z])/, '\0 ').downcase
输出:
some word here
您可能更喜欢这个的一个原因是,如果您的输入可能包含破折号或下划线,并且您不想用空格替换它们:
puts "Foo-BarBaz".underscore.gsub('_', ' ')
puts "Foo-BarBaz".gsub(/[a-zA-Z](?=[A-Z])/, '\0 ').downcase
输出:
foo bar baz
foo-bar baz
答案 3 :(得分:1)
没有我知道的内置方法。比单线更高效?不要这么认为。可能是humanize
而不是gsub
,但你没有得到完全相同的输出。