我有一个模型 Sport
。使用单表继承我有 2 个其他模型,Cricket
和 Football
,以便
class Cricket < Sport and class Football < Sport
我将这两个模型放在名为 sports 的模型目录中的子文件夹中。我将 type 列添加到
Sport
并将值作为 Cricket
或 Football
,无论合适。此外,我能够使用 Cricket.new
或 Football.new
创建对象。这种结构在 Rails 3.2.6 之前都可以正常工作。
但是现在使用 Rails 3.2.11,子文件夹中的任何模型文件都必须模块化。所以,现在看起来像这样:
module Sports
class Cricket < Sport
现在,rails 无法单独加载类
Cricket
或 Football
。因此, Cricket.new
或 Football.new
不起作用。如果我执行 Sports::Cricket.new
,那么这对我来说是个问题,因为类型列必须是类名,即 Sports::Cricket
。我应该在 Rails 3.2.11 中做什么才能使单表继承工作?我不想将
Sports::Cricket
之类的值放在我的类型列中。另外,我不想删除子目录结构。
最佳答案
我自己刚刚处理了一个类似的问题。见 How to reload files in app/models/subdirectory in dev environment for STI 。基本上你需要在初始化和重新加载时,在父类或配置文件中的某个地方对你的子类进行 require_dependency
。这是一个 rails 延迟加载的东西, and it doesn't seem like they want to change it 。我发现 Alex Reisner's post 也非常有帮助。