4

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

class Cricket < Sport and class Football < Sport

我将这两个模型放在名为 sports 的模型目录中的子文件夹中。我将类型列添加到Sport并将值设置为Cricketor Football,无论是什么合适的。此外,我能够使用Cricket.newor创建对象Football.new

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

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

module Sports
  class Cricket < Sport

现在,rails 无法加载类CricketFootball单独加载。所以,Cricket.new还是Football.new不行。如果我这样做Sports::Cricket.new,那么这对我来说是个问题,因为类型列必须是类名,即Sports::Cricket

我应该在 Rails 3.2.11 中做什么才能使单表继承起作用?我不想将值Sports::Cricket放在我的类型列中。另外,我不想删除子目录结构。

4

2 回答 2

1

我自己也处理过类似的问题。请参阅How to reload files in app/models/subdirectory in dev environment for STI。基本上,您需要require_dependency在父类或配置文件中的某个地方初始化和重新加载子类。这是一个 Rails 延迟加载的事情,他们似乎不想改变它。我发现Alex Reisner 的帖子也非常有帮助。

于 2013-02-05T16:12:06.510 回答
0

你试过用这个吗?

config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**}')]
于 2013-01-30T15:45:21.250 回答