4

私はモデルを持っていますSportCricket単一テーブルの継承を使用して、他に 2 つのモデルがFootballあるため、

class Cricket < Sport and class Football < Sport

これら 2 つのモデルを、モデル ディレクトリ内の sports というサブフォルダーに配置しました。タイプ列をに追加しSport、値をCricketまたはとして配置しましたFootball。適切なものは何でも。Cricket.newまた、 orを使用してオブジェクトを作成することもできましたFootball.new

この構造は、Rails 3.2.6 まで正常に機能します。

しかし、Rails 3.2.11 では、サブフォルダー内のすべてのモデル ファイルをモジュール化する必要があります。したがって、現在は次のようになります。

module Sports
  class Cricket < Sport

現在、レールはクラスCricketまたはFootball単独でロードできません。だから、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 に答える