Carrierwave图像无法显示,可在网站上的其他任何位置使用

时间:2014-08-12 02:33:39

标签: html ruby-on-rails ruby ruby-on-rails-4 carrierwave

我使用Carrierwave和Rails上传和显示图片。我一直在将它用于我网站的文章和其他部分而没有任何问题但是由于某种原因它不能用于我刚创建的模型。我可以看到没有图像渲染的图像标记的空间,然后在页面加载时快速消失。直到我尝试使用这个与我的其他模型没有太大区别的模型之后,才发生这样的事情:

class Ad < ActiveRecord::Base
  validates_numericality_of :zip_code
  validates_presence_of :image, :advertiser

  mount_uploader :image, ImageUploader
end

我的创建和索引操作:

  def create
    @ad = Ad.new(params[:ad].permit(:image, :advertiser, :zip_code))

    if @ad.save
      redirect_to :back
    else
      flash[:error] = "Invalid input"
      redirect_to :back
    end
  end

  def index
    @new_ad = Ad.new
    @ads = Ad.all.reverse
  end

我的_new部分:

<div id="card">
<%= form_for @new_ad, html: {multipart: true, "data-ajax" => false} do |f| %>
    <p>
        <%= f.file_field :image %>
    </p>
    <p>
        <%= f.text_field :advertiser, placeholder: "Advertiser" %>
    </p>
    <p>
        <%= f.text_field :zip_code, placeholder: "Zip code" %>
    </p>
    <p>
        <%= f.submit "Upload" %>
    </p>
<% end %>
</div></br>

我的索引视图:

<%= render "new" %>

<% for ad in @ads %>
    <div id="card">
        <div align="center">
            <%= image_tag ad.image %>
            <%= ad.advertiser %>
            <%= ad.zip_code %>
        </div>
    </div></br>
<% end %>

1 个答案:

答案 0 :(得分:0)

根据我的理解问题是你的索引视图。

<%= image_tag ad.image %>

您正在使用ad.image,这将返回您的imageuploader对象而非图像路径。因此,您可以使用ad.image.url(相对路径)或ad.image.current_path(绝对路径)来代替使​​用ad.image

<%= image_tag ad.image.url %>