2

私は、アプリディレクトリRails 3にある画像を表示する方法を理解しようとしているときに、この回答に従います。RAILS_ROOTの上のローカルファイルシステムからのjpg画像を表示します。

そこに示されているようにコントローラーを作成し、routes.rbに行を追加し、テストWebページで、コードを使用してmatch呼び出された画像をロードしたいと思います。test.jpg

<img src="/serve_image/test.jpg" />

<...>/public/images/testしかし、ファイルが見つからなかったというエラーが表示されます。
次に、画像の名前を変更して、画像が消えるようにし.jpgました。その後、スクリプトが画像を見つけて、必要に応じてロードしました。

拡張機能がどこに行ったのかアイデアはありますか?この問題をデバッグする方法がわかりません。

4

1 に答える 1

3

デフォルトでは、Railsは動的セグメントのドットと一致しません。したがって、このルートの場合:

match '/serve_image/:filename' => 'images#serve'

:filename見つかった最初のドットまでしか一致しません。したがって、ファイル名として/serve_image/test.jpg一致testし、応答としてJPGを期待していると見なされます。あなたがする必要があるのは、次のように、ファイル名にドットを含めたいことをルーターに伝えることです。

match '/serve_image/:filename' => 'images#serve', :constraints => {:filename => /[^\/]+/}

これはスラッシュ以外のものと一致し、完全なファイル名をparams[:filename]

詳細については、動的セグメントに関するRailsルーティングガイドのセクションを参照してください。

于 2013-01-26T05:24:08.740 に答える