ruby-on-rails - 如何打开一个类并将其转换为 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
解决方案
不确定是否要修改现有类,但您可以定义一个新类并将名称指向它。像这样的东西:
Journey = Class.new(ActiveRecord::Base) do
# class body
end
推荐阅读
- scala - 如何在Scala中将时间戳调整为毫秒?
- python - Tensorflow - 有没有办法实现张量图像剪切/旋转/平移?
- angular - 无法运行 ng generate @angular/material:material-nav
- android - Intent extras 未在特定设备上提供
- c++ - 双向链表父指针变化
- visual-studio - 在 Visual Studio 2017 中,我可以在桌面上使用项目引用,而在 TeamCity 构建服务器上使用文件引用吗?
- angular - "(control: AbstractControl): {[key: string]: any} | null =>" 有什么作用?
- c - 为什么使用 GTK 窗口创建 Allegro 显示会导致 gtk_dialog_run() 出现段错误?
- regex - 正则表达式正匹配和负匹配在一行
- javascript - VueJS:页面加载时自动重定向