【发布时间】:2014-10-10 11:34:33
【问题描述】:
我的项目目录中有一个common 文件夹,其中包含我们在项目之间共享的一些类(此时我们不能选择使用其他技术作为引擎)。我们在此文件夹中“复制”了项目结构,因此我们有一些路径,如common/app/models、common/lib 等)。加载我们正在使用的所有模型:
config.autoload_paths += %W(
#{config.root}/common/app/models
#{config.root}/lib
)
但现在我需要以某种方式扩展 common/app/models 文件夹中的类的行为。
我的第一个选择是在常规应用程序模型文件夹中创建一个新的 ExtendedModel,从 SharedModel 继承,将记录迁移到新模型,然后将 ExtendedModel = SharedModel 之类的东西放在初始化程序中。它会起作用,但似乎有点棘手。
我的第二个选择是在应用程序模型文件夹中创建一个具有相同名称 SharedModel 和不同方法的新模型,但 Rails 似乎忽略了这个模型,它只使用了 SharedModel。
任何想法都将不胜感激:)
【问题讨论】:
-
Ruby 允许您动态扩展类,所以这应该没有问题。所以,我的建议是进入命令行(rails c)加载你的模型扩展定义,并检查一个新实例是否会有这个新方法。
-
这对我来说听起来过于复杂。另外,自动加载部分与此有什么关系?不只是继承和混合吗?
-
@tomsoft 这个我已经试过了,方法没有加载。我找到了解决方法,我会回答我的问题。
-
@phoet 我需要这个,因为我使用的是不同的模型目录。
标签: ruby-on-rails ruby ruby-on-rails-3