kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

Module名を切り出してclass_nameを取り出す。

Qiitaに同じ内容の記事が丁度あって悲しい気分になったが、コードを書いていたので記録として残しておく。

本ブログは、備忘録という面もありますので、読まれている方は気分を害さないでいただきたいです。

動的にSQLのテーブル、カラムの別名を定義したくなり、クラス名とメソッド名を利用していたが、 app/service配下に置かれている訳でもなく、app/service/hoge/...rb という形でclassが置かれているので、直接classをそのまま取るわけにもいかないので、即興で書いていた。

サンプルコード

module Hoge
  class BaseService
    def initialize
    end

    def class_name
      self.class.to_s.split('::').last.underscore
    end
  end
end

動作

$ Hoge::BaseService.new.class_name
=> "base_service"

以上になります。

参考

名前空間を取り除いたクラス名を取得する - Qiita