如何将Ruby类名("NewUserBatch")转换为带下划线的字符串("new_user_batch")

Jas*_*nis 2 ruby string class

我需要一种通用的方法将类名转换为带有下划线的小写.例如,我希望将类名转换NewUserBatchnew_user_batch.这该怎么做?

old*_*god 7

Underscore.

>> 'NewUserBatch'.underscore
=> "new_user_batch"
Run Code Online (Sandbox Code Playgroud)

它包含在Rails中,因此如果您不使用它,可以参考其源代码.

def underscore(camel_cased_word)
  word = camel_cased_word.to_s.dup
  word.gsub!(%r::/, '/')
  word.gsub!(%r(?:([A-Za-z\d])|^)(#{inflections.acronym_regex})(?=\b|[^a-z])/) { "#{$1}#{$1 && '_'}#{$2.downcase}" }
  word.gsub!(%r([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
  word.gsub!(%r([a-z\d])([A-Z])/,'\1_\2')
  word.tr!("-", "_")
  word.downcase!
  word
end
Run Code Online (Sandbox Code Playgroud)