我有一个模型 Sport 。使用单表继承我有 2 个其他模型,CricketFootball,以便

class Cricket < Sport and class Football < Sport

我将这两个模型放在名为 sports 的模型目录中的子文件夹中。我将 type 列添加到 Sport 并将值作为 CricketFootball ,无论合适。此外,我能够使用 Cricket.newFootball.new 创建对象。

这种结构在 Rails 3.2.6 之前都可以正常工作。

但是现在使用 Rails 3.2.11,子文件夹中的任何模型文件都必须模块化。所以,现在看起来像这样:
module Sports
  class Cricket < Sport

现在,rails 无法单独加载类 CricketFootball。因此, Cricket.newFootball.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 也非常有帮助。

10-08 04:20