Railsでクラス名文字列のModule部分をなんやかんやする

  • rails

Module部分を取り除きたいときは demodulize する。 1

v = Some::AwesomeKlass
p v.class.name
# => "Some::AwesomeKlass"

p v.class.name.demodule
# => "AwesomeKlass"

p v.class.name.demodulize.underscore
# => "awesome_klass"

逆にModule部分だけを取得したいときは deconstantize を使う。2

v = Some::AwesomeKlass
p v.class.name
# => "Some::AwesomeKlass"

p v.class.name.deconstantize 
# => "Some"

v = ::Another::AwesomeKlass
p v.class.name.deconstantize 
# => "::Another"

いずれもActiveSupportの独自拡張なので、Rails環境の外では使えない。

上記メソッドの実装付近には他にも便利そうなやつが色々あるので、調べてみると面白いかも。そんなことないかも。