我有一个 Rails 应用程序,它使用一个名为 ActsAsTaggableOnSteroids 的 gem,它是一个 Rails 引擎。具体来说,我正在使用PavelNartov 的宝石叉。但没关系。
我需要为Tag
模型添加特定的功能,由引擎提供。
但是,根据我对 Rails 引擎的理解和 Rails 中神奇的加载功能,如果我在我的模型目录中放置一个名为“tag.rb”的文件,那么它将完全取代引擎中的那个。
理想情况下,我将能够执行以下操作:
class Tag < ActsAsTaggable::Tag
# my stuff
end
...但是,这不起作用,因为引擎提供的模型没有命名空间。
所以,我想出了这个噩梦,我把它放进去app/models/tag.rb
:
path = ActsAsTaggable::Engine.config.eager_load_paths.grep(/models/).first
require File.join(path, 'tag')
Tag.class_eval { include TagConcern }
但是必须有更好的方法!我觉得我错过了什么。如果可能的话,我不想在我的应用程序中添加这种陌生感。