Ruby 1.9.3-p392 で Rails 3 アプリケーション (具体的には 3.2.13) に取り組んでいます。
私のコントローラーの1つで、「作成」アクションは画像を受け取ることができます(ActionDispatch::Http::UploadedFileとして)
as_json メソッドをオーバーライドして、tempfile File オブジェクト自体の代わりに tempfile パスを返すことで、ActionDispatch::Http::UploadedFile にモンキーパッチを適用しようとしています。
私がこれを行っている理由は、コンテキストで to_json を呼び出してログ コンテキスト (要求パラメーターを含む) をシリアル化するデータベース ロガーがあるためです。問題は、上記のクラスで to_json を呼び出すと、大量のバイナリ データが生成され、ログがいっぱいになることです。
したがって、「lib」の下に次のディレクトリ構造を作成しました: 「action_dispatch/http/uploaded_file.rb」 このファイル内で、クラスの名前が付けられます。ActionDispatch::Http::UploadedFile
また、次の方法で lib フォルダーを application.rb に追加しました。
config.autoload_paths += Dir["#{config.root}/lib"]
問題は、Rails がモンキー パッチを適用したクラスをロードしないことです。require "action_dispatch/http/uploaded_file"
コントローラーファイルの先頭に追加すると、すべて正常に動作します。
Rails がモンキー パッチを適用したクラスをオートロードしないのはなぜですか? ディレクトリ構造とクラスの命名は、Rails の規則に従っています。