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

あまり綺麗ではありませんが、コードに影響ない範囲まで分離することはできました。