假设我在项目中包含了一个名为acts_as_locatable
的gem,其中定义了ActsAsLocatable::Location
类。我想在这个类中添加一个多态:subject
关联,这可以通过简单地编辑gem中的类来添加关联来完成,如下所示:
module ActsAsLocatable
class Location < ::ApplicationRecord
belongs_to :subject, polymorphic: true
...
end
end
但这是个坏主意,因为我不想在每次更新gem时都要保持这种变化。分叉Gem并修改fork也会遇到同样的问题。
如何在不编辑gem中的模型文件的情况下扩展,修饰或以其他方式扩充此类以添加多态:subject
关联,同时保持gem的其余功能不受干扰?
答案 0 :(得分:0)
在对猴子补丁进行更多研究之后,似乎有一种解决方案是添加初始化器(例如<root>/config/initializers/acts_as_locatable.rb
):
ActsAsLocatable::Location.class_eval do
belongs_to :subject, polymorphic: true
end
这是最好的选择吗?