ruby - 扩展具有相同功能的两个类的最佳架构

标签 ruby

我正在编写一个报告 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/

相关文章:

ruby-on-rails - Rails - 如何在自定义布局中使用 application.html.erb?

ruby-on-rails - 用 bool block 过滤(轮胎/ Elasticsearch )

ruby-on-rails - 如何创建一个规范来验证 Pundit 拒绝未登录的用户?

mysql - 解决错误 : An error occurred while installing mysql2 (0. 4.5),Bundler 无法继续。确保 `gem install mysql2 -v ' 0.4。 5'`

ruby-on-rails - Windows安装rmagick错误

ruby - 无需递归或使用 Ruby/Erlang 堆栈迭代生成排列

javascript - 如何在 onClick 事件中创建循环?

arrays - Ruby - 访问实例变量时出错

ruby-on-rails - Rspec 不识别 RSpec::Matcher 和 RSpec::Core 的任何方法

ruby-on-rails - Ruby on Rails 回形针多重上传与嵌套属性