シナリオ: Rails 3.2 アプリに多数の STI モデルがあります。以下に示すように、親クラスを使用してデータベースに子クラスを照会することがあります。
class ParentObject < ActiveRecord::Base
end
class ChildObject < ParentObject
end
class User < ActiveRecord::Base
has_many :parent_objects
end
> User.find(1).parent_objects
=> [#<ParentObject ...>, #<ChildObject ...>]
生成された SQL クエリを調べると、(予想どおり) 次のように表示されます。
WHERE "parent_objects"."type" IN ('ParentObject', 'ChildObject')
問題:開発環境では、変更があるとクラスが動的に再ロードされます。何かを変更しParentObject
て Rails コンソールを再起動しないと、次のようになります。
> User.find(1).parent_classes
=> [#<ParentObject ...>]
生成された SQL の検査:
WHERE "parent_objects"."type" IN ('ParentObject')
しかし:
> ChildObject
=> ChildObject(...)
> User.find(1).parent_objects
=> [#<ParentObject ...>, #<ChildObject ...>]
質問: Rails アプリのどこに、すべての Web サーバー要求で STI モデルをリロードする小さなコードを記述できますか?