【问题标题】:Sharing classes between modules on Rails在 Rails 上的模块之间共享类
【发布时间】:2021-05-05 08:36:45
【问题描述】:

我正在开发一个项目,使用 camunda-workflow 从 Rails 应用程序与 Camunda 进行通信。 camunda-workflow 通过将 Camunda 进程键映射到具有相同名称的模块,并将任务的 id 映射到类名来查找要执行的方法。

问题在于,对于两个密切相关的进程,它们共享大部分相同的任务,我需要有两个模块,每个模块都有几乎所有相同的类。为了避免这种情况,我想要么将一个模块中的类包含到另一个模块中,要么将父模块的类包含到两者中。

对于这些模块

module ModuleA
  class ClassA
    def my_method
      puts 'ModuleA, classA method'
    end
  end
end

module ModuleB
end

我需要能够打电话

ModuleB::ClassA.new.my_method

如何在模块之间共享这些通用类以避免重复?

【问题讨论】:

  • 可能是include ModuleA in ModuleB?
  • @iGian 我试过了,不行。

标签: ruby-on-rails ruby module


【解决方案1】:

我找到了一种使用 ActiveSupport::Concern 的方法

require "active_support/concern"

module ModuleA
  extend ActiveSupport::Concern
  included do
    class ClassA
      def module_a_class_a
        puts 'ModuleA, classA method'
      end
    end
  end
end

module ModuleB
  include ModuleA
end

现在我可以从 ModuleB 访问 ClassA 的方法了:

ModuleB::ClassA.new.module_a_class_a

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 2010-12-13
    • 2013-01-21
    • 2019-09-19
    • 2015-05-16
    • 2018-04-21
    • 2021-09-24
    • 2017-10-04
    相关资源
    最近更新 更多