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

sjs*_*jsc 15 ruby ruby-on-rails

我知道你可以这样做:

"SomeWordHere".underscore.gsub("_", " ") 
Run Code Online (Sandbox Code Playgroud)

在这里得到"一些字".

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

Anu*_*rag 23

替代文字

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

"SomeWordHere".underscore => "some_word_here"

"SomeWordHere".underscore.humanize => "Some word here"

"SomeWordHere".underscore.humanize.downcase => "some word here"
Run Code Online (Sandbox Code Playgroud)

  • "下划线"和"人性化"不仅会过度爆炸,而且对于OP的目的也是不正确的.例如,`"UserId".underscore.humanize`给出"用户"`.`underscore`有自己的替代品.例如,`"ABC :: UserId".underscore`给出了""abc/user_id"`.你是对的,自定义实现是要走的路. (5认同)
  • 看看下划线和人性化的实现:http://stackoverflow.com/questions/1509915/converting-camel-case-to-underscore-case-in-ruby http://snippets.dzone.com/posts/show/ 6350 - 那里有很多字符串操作,这可能比OP的原始建议更复杂. (2认同)

Wes*_*ger 10

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

"SomeWordHere".titleize.downcase


Mar*_*ers 5

您可以使用正则表达式:

puts "SomeWordHere".gsub(/[a-zA-Z](?=[A-Z])/, '\0 ').downcase
Run Code Online (Sandbox Code Playgroud)

输出:

some word here
Run Code Online (Sandbox Code Playgroud)

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

puts "Foo-BarBaz".underscore.gsub('_', ' ')
puts "Foo-BarBaz".gsub(/[a-zA-Z](?=[A-Z])/, '\0 ').downcase
Run Code Online (Sandbox Code Playgroud)

输出:

foo bar baz
foo-bar baz
Run Code Online (Sandbox Code Playgroud)