【问题标题】:How to find all the classes that have included a module如何查找包含模块的所有类
【发布时间】:2014-10-03 17:57:39
【问题描述】:

我有一个名为 Nameable 的模块和一些包含该模块的模型。

有没有办法知道哪些模型(类)包含了这个模块?

【问题讨论】:

  • 什么时候你想知道?总是有includedextended
  • 嘿@DaveNewton 我正在设置一个警戒回调,每当我更改一个模块时都会运行所有规范(比如说Nameable)。因此,为了回答您的问题,我想随时知道包含Nameable 的类是什么。

标签: ruby-on-rails ruby


【解决方案1】:

好吧,我已经知道如何找到至少所有类的名称了。

Module.constants.select { |c| (eval c.to_s).is_a?(Class) && (eval c.to_s).include?(Nameable)}

不知道这是否是最好的方法。

【讨论】:

    【解决方案2】:

    另一种方法是:

    ActiveRecord::Base.descendants.map { |model| model.include?(Nameable) }
    

    这将为您提供 truefalse 值列表,具体取决于模型是否包含 Nameable 模块。

    您可以操纵map 的正文以返回您喜欢的数据(我无法从您的问题中得到)。

    【讨论】:

      猜你喜欢
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      相关资源
      最近更新 更多