0

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 の規則に従っています。

4

2 に答える 2

1

コードをconfig/initializers/your_filename.rbファイルに移動します。これらのファイルのコードは、Rails アプリケーションの起動プロセス中に読み込まれます。

それは一般的にです。ActionDispatch::Http::UploadedFileしかし、あなたのアプリに関する情報があまりないので、なぜあなたがクラスにモンキー パッチを適用したいのかわかりません。

于 2013-04-28T21:54:25.730 に答える
0

試す

config.autoload_paths += ["#{config.root}/lib"]
于 2013-06-27T07:47:00.320 に答える