Ruby on Rails:将“SomeWordHere”转换为“some word here”

我知道你可以这样做:

"SomeWordHere".underscore.gsub("_", " ") 

得到“在这里说”。

我认为对于这么简单的事情来说可能有点太多了。 是否有更有效的方法(可能是内置方法?)将“SomeWordHere”转换为“某些字在这里”?

替代文字

下划线人性化的方法是为表,类/包名等之间的转换而设计的。最好使用自己的代码进行替换以避免意外。 看评论。

 "SomeWordHere".underscore => "some_word_here" "SomeWordHere".underscore.humanize => "Some word here" "SomeWordHere".underscore.humanize.downcase => "some word here" 

我认为这是一个更简单的解决方案:

"SomeWordHere".titleize.downcase

您可以使用正则表达式:

 puts "SomeWordHere".gsub(/[a-zA-Z](?=[AZ])/, '\0 ').downcase 

输出:

 some word here 

您可能更喜欢这个的一个原因是,如果您的输入可能包含破折号或下划线,并且您不想用空格替换它们:

 puts "Foo-BarBaz".underscore.gsub('_', ' ') puts "Foo-BarBaz".gsub(/[a-zA-Z](?=[AZ])/, '\0 ').downcase 

输出:

 foo bar baz foo-bar baz 

不,我知道没有内置的方法。 比单线更高效? 不要这么认为。 也许humanize而不是gsub ,但你没有得到完全相同的输出。