Rails 4 - CarrierWave default_url无法使用资产图像

时间:2014-10-05 13:30:52

标签: ruby-on-rails image carrierwave

class ImageUploader < CarrierWave::Uploader::Base

  # Include RMagick or MiniMagick support:
  include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def default_url
    ActionController::Base.helpers.asset_path("fallback/" + [main, "default.png"].compact.join('_'))
  end

  # Create different versions of your uploaded files:
  version :thumb do
    process :resize_to_fit => [50, 50]
  end

  version :main do
    process :auto_orient
    process :resize_to_fit => [300, 360]
  end

  def auto_orient
    manipulate! do |img|
      img = img.auto_orient
    end
  end
end

我将我的默认图片上传到app / assets / images / fallback / main / default.png

此default_url遵循载波gem所描述的标准资产管道。它不会给我一个错误,但在视图上只显示一个损坏的图像图标。但是,如果有一个有效的上传,它会正确显示上传,所以我知道:thumb,以及:主要进程正在运行。破坏的唯一部分是default_url,我不明白为什么。我正在使用rails 4顺便说一句。有什么想法/想法吗?

谢谢!

我在视图中的代码显示图像是否已上传,且默认网址是否为

<div class="img-container">
  <%= image_tag @user.image_url(:main).to_s %>
</div>

2 个答案:

答案 0 :(得分:6)

我刚才有类似的问题。尝试简单地返回&#34; default.png&#34;在default_url方法中没有其他内容。据我所知,Rails或Carrierwave本身处理所有资产管道问题,并且只使用名称正确加载default.png。

答案 1 :(得分:0)

我可以看到你在default_url方法中使用'main'变量,但应该version_name。如果你想直接使用'main'版本,你应该写下asset_path("fallback/" + ["main", "default.png"].compact.join('_'))或者只写"fallback/main_default.png"

你也错了:

  1. 默认图片已上传至app / assets / images / fallback / main / default.png
  2. default_url将生成下一个路径 - 'fallback / main_default.png'