我正在尝试获取子类的父模块的名称:
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
如何获取子类的父模块而不是基类?
这最终比我想象的要容易。调用self.to_s
将为您提供全名(包括模块)。所以你可以抓住倒数第二个:
class_name = self.to_s.split('::')[-2]
我认为
问题是 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"
]