gpt4 book ai didi

ruby-on-rails - 从 Rails 引擎扩展模型(而不是替换它)

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:30 25 4
gpt4 key购买 nike

我有一个 Rails 应用程序,它使用名为 ActsAsTaggableOnSteroids 的 gem,这是一个 Rails 引擎。具体来说,我正在使用 PavelNartov's fork的 gem 。但没关系。

我需要向引擎提供的 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 }

但必须有更好的方法!我觉得我错过了什么。如果可能的话,我不想将这种奇怪的东西添加到我的应用程序中。

最佳答案

只需通过查找 gem 模型的路径来请求该文件:

require File.join(Gem::Specification.find_by_name("bborn-acts_as_taggable_on_steroids").gem_dir, 'app/models/tag')

Tag.class_eval do
# ...
end

关于ruby-on-rails - 从 Rails 引擎扩展模型(而不是替换它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17356970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com