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環境の外では使えない。
上記メソッドの実装付近には他にも便利そうなやつが色々あるので、調べてみると面白いかも。そんなことないかも。
-
https://github.com/rails/rails/blob/eb254db4addbee8cbaff0362e3321df2fced1871/activesupport/lib/active_support/core_ext/string/inflections.rb#L152-L164 ↩︎
-
https://github.com/rails/rails/blob/eb254db4addbee8cbaff0362e3321df2fced1871/activesupport/lib/active_support/core_ext/string/inflections.rb#L166-L179 ↩︎