1

サブクラスの親モジュールの名前を取得しようとしています:

module Special
  class BaseController
    def self.action
      puts Module.nesting.inspect # i want this to be relative to self
    end
  end
end

module Foobar
  class Controller < Special::BaseController
    action do
      # should print Foobar::Controller
    end
  end
end

基本クラスの代わりにサブクラスの親モジュールを取得するにはどうすればよいですか?

4

2 に答える 2

1

これは思ったより簡単に終わりました。呼び出すself.to_sと、完全な名前 (モジュールを含む) が得られます。したがって、最後から 2 番目のものを取得できます。

class_name = self.to_s.split('::')[-2]
于 2012-08-06T23:42:59.553 に答える
0

問題は、あなたが知りたい時点で Ruby がモジュールとクラスを定義し終えていないことだと思います。定義を閉じたら、そのインスタンスを作成して次のことを確認できます。

irb(main):017:0> Foobar::Controller.new.class
Foobar::Controller < Special::BaseController

次に、文字列分割を行う場合です。

irb(main):033:0> Foobar::Controller.new.class.to_s.split('::')
[
    [0] "Foobar",
    [1] "Controller"
]
于 2012-08-06T22:10:17.107 に答える