我正在编写一个报告 gem,它将有一些帮助程序从 ActiveRecord 中提取数据。
它将实现的一个函数是 to_report_yaml,我需要从单个记录(ActiveRecord::Base 实例)或记录数组中调用它。 to_report_yaml 的实现在这两种情况下非常相似,所以我想要实现一次并使用鸭子类型在我的逻辑中做出一些决定。
我的问题是。扩展 ActiveRecord::Base 和 Array 的最佳方法是什么,以便两者都有一个名为 to_report_yaml 的函数指向相同的实现?
最佳答案
您应该在一个模块中实现您的功能并将其包含在两个类中。这个概念叫做Mixins .它在 Ruby 库中越来越多地被使用,并且是 Ruby 对多重继承的回答(这是一个更广泛的概念,但通常更难理解它的边缘情况)。
module MyModule
def to_report_yaml
self.to_yaml # or whatever
end
end
class ActiveRecord::Base
include MyModule
end
class Array
include MyModule
end
关于ruby - 扩展具有相同功能的两个类的最佳架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8203512/