【问题标题】:Carrierwave images are not displaying, works everywhere else on the siteCarrierwave 图像未显示,可在网站上的其他任何地方使用
【发布时间】:2014-08-12 02:33:39
【问题描述】:

我正在使用带有 Rails 的 Carrierwave 来上传和显示图像。我一直将它用于文章和我网站的其他部分,但由于某种原因,它不适用于我刚刚创建的模型。我可以看到没有图像渲染的图像标签的空间,然后在页面加载时迅速消失。直到我尝试使用与我的其他模型没有太大区别的模型之前,都没有发生过这样的事情:

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

【问题讨论】:

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


    【解决方案1】:

    根据我的理解,问题在于您的索引视图。

    <%= image_tag ad.image %>
    

    您正在使用 ad.image 这将返回您的 imageuploader 对象而不是图像路径。因此,您可以使用 ad.image.url(relative path) 或 ad.image.current_path(absolute path) 来代替 ad.image

    <%= image_tag ad.image.url %>
    

    【讨论】:

    • 感谢您的回复。我尝试了 image_url 和 image.url 但两者都生成了与 ad.image 相同的 HTML,它甚至与我的其他正确显示图像的模型相匹配。还有什么可能是错的吗?
    猜你喜欢
    • 2013-11-06
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多