首页 > 解决方案 > 如何打开一个类并将其转换为 ActiveRecord 对象?(例如,让它继承 ActiveRecord::Base)

问题描述

我有一个名为 Journey 的类,其中包含很多类方法。既然我有一张“旅程”表,我也想有一个相应的 Journey ActiveRecord 类。显然,我所要做的就是在类中添加“< ActiveRecord::Base”,但我想知道是否可以在 Rails 控制台中修改 Journey 类,使其成为 ActiveRecord 类而不接触源代码?

我用谷歌搜索了如何为一个类动态更改父类,似乎这是不可能的?..那还有其他方法吗?比如,创建一个同名的新类,它将包含旧 Journey 的所有内容,但也继承 ActiveRecord::Base?或者也许还有其他方法可以将类转换为 ActiveRecord 类?

这不是我真正需要的东西(因为我可以在现实生活中修改项目的源代码),但我真的很好奇它在理论上是否可以在 Ruby 中完成——我只是习惯了几乎所有东西都在 Ruby 中的事实可以即时完成,我想知道这是否也可行?..

  class Journey
    def self.find_for(vehicle, start_date, end_date)
      # ...
    end

    # ... lots of other class methods
  end

标签: ruby-on-railsrubyinheritanceactiverecordmonkeypatching

解决方案


不确定是否要修改现有类,但您可以定义一个新类并将名称指向它。像这样的东西:

Journey = Class.new(ActiveRecord::Base) do
  # class body
end

推荐阅读