Rails 4 - CarrierWave默认URL无法与资产图像一起使用

3
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遵循了carrier wave gem描述的标准资产管道。它没有给我任何错误,但在视图上仅显示一个损坏的图像图标,而没有默认图片。然而,如果有有效的上传,它会正确显示上传,所以我知道:thumb和:main进程正在工作。唯一失效的是default_url,我不知道为什么。顺便说一下,我使用的是rails 4.有什么想法/建议吗?
谢谢!
我在视图中的代码会显示图片,如果上传成功则会正常显示,否则会显示损坏的默认链接。
<div class="img-container">
  <%= image_tag @user.image_url(:main).to_s %>
</div>

PNG的大小有关系吗?如果有的话,它是300x400。 - camdixon
2个回答

6

我刚遇到了类似的问题。试着在你的default_url方法中只返回"default.png",不要加其他内容。据我所知,Rails或Carrierwave会自行处理所有资产管道问题,并且只有名称就可以正确加载default.png。


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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接