Rails单个包含到多个类

时间:2019-03-05 20:02:15

标签: ruby-on-rails module

我有一个模块TFS SOLUTION和该模块中的许多类。我想像第一个类一样向DelayTasks中的所有类都包含另一个模块DelayedEmails,但只有一个include。有办法吗?

DelayedTasks

2 个答案:

答案 0 :(得分:2)

看来您应该能够做到:

module DelayedTasks

  class Base 
    include DelayedEmails
  end

  class A < Base
  end

  class B < Base
  end

  class C < Base
  end

  class D < Base
  end

end

顺便说一句,在一个文件中定义多个类似乎不是一个好习惯(IMO)。当然可以。但是,您可能最终会在这些类的定义位置四处寻找,而如果它们在单独的文件中,则它们的定义位置可能会更加明显。

答案 1 :(得分:-1)

解决方案1(直接):

module DelayedTasks
  class A
  end

  class B
  end

  class C
  end

  class D
  end
end

DelayedTasks.constants.each do |constant|
  constant.include DelayedEmails if constant.is_a? Class
end

但是,因为上面的文件被逐行调用,所以如果还有一个文件在DelayedTasks模块内添加了更多的类,并且该文件在上面的代码之后被加载,则这些类将赢得上面的.each循环未将其考虑在内,因此它们不会与include一起获得DelayedEmails

替代解决方案

假设首先要问这个问题是为了避免在您所有的类中都包含多个模块...

module DelayedTasks
  module Dependencies
    def self.included(base)
      base.include DelayedEmails
      # base.include SomeOtherModule1
      # base.include SomeOtherModule2
      # ...
    end
  end

  class A
    include Dependencies
  end

  class B
    include Dependencies
  end

  class C
    include Dependencies
  end
end