Rails 3.2.11中具有模型子目录的单表继承

时间:2013-01-30 15:32:08

标签: ruby-on-rails ruby ruby-on-rails-3.2 single-table-inheritance rails-models

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

class Cricket < Sport and class Football < Sport

我把这两个模型放在名为sports的models目录下的子文件夹中。我将类型列添加到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之类的值。 另外,我不想删除子目录结构。

2 个答案:

答案 0 :(得分:1)

我自己刚刚处理过类似的问题。见How to reload files in app/models/subdirectory in dev environment for STI。基本上你需要require_dependency你的子类在初始化和重新加载,在父类或配置文件中的某个地方。这是一个铁路延迟加载的东西,and it doesn't seem like they want to change it。我发现Alex Reisner's post也非常有帮助。

答案 1 :(得分:0)

你试过这个吗?

config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**}')]