如何找出我目前包含我的模块的课程?

时间:2017-04-03 15:11:09

标签: ruby-on-rails ruby

我们如何找出我们目前在哪个类中包含模块? (来自rails-background,我们执行has_ *样式模块)

class Foo
  has_likes
end

module HasLikes
  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    def has_likes(options = {})
    end
  end

  module ContentMethods
    def self.included(base)
      base.extend ClassMethods
    end


    #  ?????
    # how do we get Foo here?

  end
end

1 个答案:

答案 0 :(得分:0)

首先,正如@Jordan在评论中所说,它闻起来像是一个设计缺陷。

辅助,在module HasLikes def self.included(base) base.extend(ClassMethods) end module ClassMethods def has_likes(options = {}) end end module ContentMethods def self.included(base) base.extend ClassMethods end end end class Foo include ::HasLikes::ContentMethods has_likes end ObjectSpace.each_object(Class) do |x| p(x) if x <= ::HasLikes::ContentMethods end #⇒ Foo 声明中,这绝对是不可能的,因为在声明之后它总是被包含在中。

一般情况下,之后可以使用ObjectSpace#each_object

执行此操作
[7][2]

但请不要在家里或学校那样做。