2012-03-06 37 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 

這一切奇妙的作品在開發模式(因爲資產流水線是禁用的),但是當我嘗試在生產中的應用程序,我得到(可以預料,我想)錯誤:「ActionView :: Template :: Error(book_covers/61沒有預編譯)」。下面是呈現圖像的代碼:

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

我寧可不爲整個應用程序禁用資產流水線,只是這些圖像。我怎麼能做到這一點(或者我只是接近這個問題)?

+0

您使用一些assets_host配置? – shingara 2012-03-06 08:34:26

+0

究竟什麼返回'書[:cover_image]'? – shingara 2012-03-06 08:35:45

+0

@shingara我正在使用默認assets_host配置 - 實際上我沒有自定義任何資產配置值。 book [:cover_image]返回一個相對路徑(如BookCoversController處理的「book_covers/1」)。 – 2012-03-06 19:47:49

回答

3

如何生成圖像標記自己沒有資產管道,即先命名的路線:

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) %> 

現在資產管道甚至不知道關於你的圖像,你的控制器的顯示動作將以本書的ID作爲參數被調用。