Rails 4.0 の STI を development モードで使うとサブクラスがロードされない問題
単一テーブル継承はたまに使いますが、使うたびに何かしら問題が起きる気がします。
class Animal < ActiveRecord::Base end class Dog < Animal end class Cat < Animal end
これらのクラスを(実際は色々と問題があるので別ファイルに分けて)実装し
Animal.subclasses
と書くと
[Dog, Cat]
が返ってきて欲しいし、実際 production 環境では動作するのですが development 環境で素直に実行すると
[]
と空の配列が返ってきます。理由は development モードではモデルは都度ロードされるからなので config/environments/development.rb の末尾に1行追加して常時読まれる状態にしてしまいます。
Rails.application.configure do # 略 [Dog, Cat] end
あまり綺麗ではありませんが、コードに影響ない範囲まで分離することはできました。