2012-03-06 54 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作为参数被调用。

相关问题