【问题标题】:Carrierwave remove picture and set back to default载波删除图片并设置回默认值
【发布时间】:2020-10-13 03:52:11
【问题描述】:

我正在使用带有carrierwave gem 的 Rails 3。

我设法从我的用户模型中删除了头像图像,如下所示:

@user.remove_photo!

而且效果很好。但是,我想将该用户的图片 url 设置回 default_url (这是每个用户在上传之前拥有的图片)。

有什么想法吗?

--

图片显示代码:

<%= image_tag(@user.photo.send(:layout).url, :alt => @user.full_name, :class => 'photo large') %>

default_url 代码:

def default_url
    "default_photo.jpg"
  end

【问题讨论】:

  • 我不会在用户头像中设置默认照片。如果用户图像不存在,我会在您的静态资产中包含图像并执行一个 if 语句来显示默认图像。
  • 其实这是我能想到的唯一解决方案。我想知道 gem 是否有办法将图片设置回默认值。
  • 粘贴您的代码以显示图像,并粘贴您的代码为您的 def url
  • 你去@fatfrog

标签: ruby-on-rails-3 carrierwave


【解决方案1】:

来自文档:

https://github.com/carrierwaveuploader/carrierwave

在许多情况下,尤其是在处理图像时,这可能是一个不错的选择 提供默认网址的想法,以防万一没有文件 上传。您可以通过覆盖 default_url 方法轻松地做到这一点 在您的上传器中:

class MyUploader < CarrierWave::Uploader::Base
  def default_url
    "/images/fallback/" + [version_name, "default.png"].compact.join('_')
  end
end

或者,如果您使用的是 Rails 资产管道:

class MyUploader < CarrierWave::Uploader::Base
  def default_url
    ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
  end
end

【讨论】:

  • 不,你没有理解我的问题。我已经有了。问题是在我删除照片后返回 default_url。
  • 你没有按照代码,应该是"/"+ [version_name, "default.png"].compact.join('_')
【解决方案2】:

你需要强制更新数据库中的字段为null,之后carrierwave将使用default_url,你可以通过调用Model.where(&lt;CONDITIONS&gt;).update_all(photo: nil)instance.update_column(photo: nil)来做到这一点

【讨论】:

    猜你喜欢
    • 2023-01-18
    • 2018-07-17
    • 2018-03-30
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多