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