繁体   English   中英

如何在Ruby on Rails中从Gem向现有模型添加多态关联?

[英]How to add a polymorphic association to an existing model from a Gem in Ruby on Rails?

假设我在我的项目中包含了一个名为acts_as_locatable的gem,其中定义了ActsAsLocatable::Location类。 我想在这个类中添加一个多态:subject关联,这可以通过简单地编辑gem中的类来添加关联来实现,如下所示:

module ActsAsLocatable

  class Location < ::ApplicationRecord

    belongs_to :subject, polymorphic: true

    ...

  end

end

但这是一个坏主意,因为我不希望每次更新gem时都要保持这种变化。 分叉Gem并修改fork也会遇到同样的问题。

如何扩展,修饰或以其他方式扩充此类以添加多态:subject关联而无需在gem中编辑模型文件,同时保持gem的其余功能不受干扰?

在对猴子补丁进行更多研究之后,似乎有一个解决方案是添加一个初始化器(例如<root>/config/initializers/acts_as_locatable.rb ):

ActsAsLocatable::Location.class_eval do
  belongs_to      :subject,           polymorphic: true
end

这是最好的选择吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM