2012-03-06 27 views
2

私は、ユーザがアップロードした画像がデータベースに保存されているRails 3.1アプリケーションを持っています。私は専用のパスを使ってこれらの画像をRailsコントローラを通して提供しています。ここに私のroutes.rbをの一部です:アセットパイプラインと画像はデータベースに保存されています

get "images/book_covers/:book_id", :controller => :book_covers, :action => :show 
get "assets/book_covers/:book_id", :controller => :book_covers, :action => :show 
ここ

は、コントローラからのコードは次のとおりです。

class BookCoversController < ApplicationController 
    def show 
    if @image = BookCover.find_by_book_id(params[:book_id]) 
     send_data(@image.image, :type => @image.content_type, :filename => "book_cover_#{@image.book_id}", :disposition => 'inline') 
    else 
     render :file => "#{RAILS_ROOT}/public/404.html", :status => 404 
    end 
    end 
end 

このすべては、(資産のパイプラインが無効になっているので)開発モードで見事に動作しますが、Iプロダクションでアプリを試してみると、「ActionView :: Template :: Error(book_covers/61はあらかじめコンパイルされていない)」というエラーが(おそらくは、私が思いついた)

<%= image_tag book[:cover_image], :class => book[:cover_source].downcase %> 

これらの画像だけでは、アプリ全体のアセットパイプラインを無効にしたくはありません。私はこれをどのように達成することができますか?

get "images/book_covers/:book_id", :controller => :book_covers, :action => :show, :as => :book_cover_image 

して、テンプレート

<%= tag :img, :src => book_cover_image_path(book[:id], :class => book[:cover_source].downcase) %> 

で今アセットパイプラインでも知ることができません。画像を生成について、すなわち最初のルートに名前を付け、アセットパイプラインなしで、自分にタグを付け方法

+0

assets_host設定を使用していますか? – shingara

+0

正確に 'book [:cover_image]'を返すのは何ですか? – shingara

+0

@shingara私はデフォルトのassets_host設定を使用しています。実際、私はアセット設定値をカスタマイズしていません。 book [:cover_image]は相対パス(BookCoversControllerが次に処理する "book_covers/1"など)を返します。 –

答えて

3

あなたの画像について、あなたのコントローラーのshowアクションは、本のidをパラメーターとして呼び出されます。

関連する問題