Alex Reisnerのブログ投稿からのヒントを使用して、モデルの1つにSTIを実装しました。私はすでにすべてのサブクラスにスーパークラスのコントローラーを使用させ、追加の属性を保持するためにシリアル化/保存しました。model_name
スーパークラスにメソッドとself.select_options
メソッドを追加し、 Alexのブログからプリロード初期化子を追加しました。また、メソッドcollection_select
を使用するように_formビューヘルパーと属性の検証を変更しましたself.select_options
。私のサブクラスはすべて、app / models / subfolder内の個々のファイルにありますが、SubFolder::Subclassのように名前空間は付けられていません。
それから私は問題にぶつかり始めます。コードを変更するself.select_options
と、すべてのサブクラスの戻りを停止します。小さなサブセットのみを返すか、何も返しません。したがって、検証と_formの関連付けにより、コードの変更後にモデルを編集/更新することはできません。私の知る限り、コードを変更すると、Railsは環境をリロードしますが、サブフォルダー内のモデルはリロードしません。
多くの提案のようにconfig.autoload_pathsにルートを追加しようとしましたが、最終的には機能しませんでした。
したがって、最終的には、次のことが必要です。
- 自動読み込みを修正するために、変更のたびにサーバーを再起動する必要はありません。
- 配列を手動で維持することを避けるために、すべての子を含むサブディレクトリに基づいてください
- Rails 3.2.11、ruby 1.9.3p125、ubuntu 12.04.01、rvm