1. ホーム
  2. ruby-on-rails

[解決済み] Rubyのクラス名をアンダースコアで区切られたシンボルに変換するには?

2023-01-05 01:27:04

質問

クラス名をプログラムで変更するにはどうしたらよいでしょうか。 FooBar というクラス名をシンボルに変換するにはどうしたらよいでしょうか。 :foo_bar 例えばこんな感じですが、キャメルケースを適切に処理できますか?

FooBar.to_s.downcase.to_sym

どのように解決するのですか?

Railsには underscore というメソッドがあり、これを使うとCamelCasedの文字列をunderscore_separatedの文字列に変換することができます。なので、こんなことができるかもしれません。

FooBar.name.underscore.to_sym

しかし、ipsum が言うように、それを行うためだけに ActiveSupport をインストールする必要があります。

もし、そのためだけに ActiveSupport をインストールしたくないのであれば、猿真似で underscoreString を自分自身で作成します(アンダースコア関数は ActiveSupport::Inflector ):

class String
  def underscore
    word = self.dup
    word.gsub!(/::/, '/')
    word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
    word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
    word.tr!("-", "_")
    word.downcase!
    word
  end
end