3

クラス名をアンダースコア付きの小文字に変換する一般的な方法が必要です。たとえば、クラス名NewUserBatchnew_user_batch. これを行う方法?

4

3 に答える 3

7

Underscore

>> 'NewUserBatch'.underscore
=> "new_user_batch"

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
于 2012-10-18T09:02:53.913 に答える
2

名前空間のないクラス名しかない単純なケースでは、次のワンライナーを使用できます。

編集:前向きなアサーションで更新(@vladrに感謝)

"MYRubyClassName".gsub(/(.)([A-Z](?=[a-z]))/,'\1_\2').downcase

# => "my_ruby_class_name"

これにより、別の文字に続くすべての大文字が検索され、その後に小文字が続き、その前にアンダースコアが挿入されてから、すべてが小文字になります。

于 2012-10-18T09:31:12.870 に答える
0

また、ヒント: INPUT (NewUserBatch) と OUTPUT (new_user_batch) を知っているかどうかを調べるには、次の方法を使用します。

"NewUserBatch".find_method("new_user_batch")
于 2012-10-18T10:05:20.627 に答える