在 Rails 上的模块之间共享类
Posted
技术标签:
【中文标题】在 Rails 上的模块之间共享类【英文标题】:Sharing classes between modules on 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 我试过了,不行。
【参考方案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
【讨论】:
以上是关于在 Rails 上的模块之间共享类的主要内容,如果未能解决你的问题,请参考以下文章
在 Sinatra 和 Rails 之间共享 Yaml 配置文件