【问题标题】:carrierwave default image update without file select & upload没有文件选择和上传的carrierwave默认图像更新
【发布时间】:2017-04-10 16:33:37
【问题描述】:

很多用户都问过同样的问题,但我很困惑..

导轨:4.2.5

载波

多云

我想在创建用户时默认上传头像。

class UsersController < ApplicationController
    after_action :set_default_avatar!, only: [:create]

    def create
       **************
       **************
    end

    def set_default_avatar!
       url = ImageUploader.default_url()
       @user.update_attribute(:avatar, url)
    end
end

class ImageUploader < CarrierWave::Uploader::Base

    def self.default_url()
        ActionController::Base.helpers.asset_path("fallback/" + "avatar_#{rand(1..15).to_s}.jpg"])
    end

end

一旦用户创建过程完成,就会处理“after_action”。

“default_url”返回一个位于'public/fallbak/'中的随机图像路径。

我把url放在user.avatar中,用户头像已经更新为NULL。 Cloudinary 上也没有上传任何图片。

基本上,我想将图像存储在 Cloudinary 服务中。

当用户在屏幕上编辑用户信息时,他们可以上传头像图像。

但是我不能按照上面的逻辑上传图片作为默认头像。

我把 Carrierwave 的文件加红了,但它对我不起作用。

我认为我的代码中缺少某些内容。

非常感谢任何帮助。

【问题讨论】:

标签: ruby-on-rails ruby carrierwave cloudinary


【解决方案1】:

它没有上传文件,因为 ImageUploader.default_url 返回一个相对路径。

你有两个选择:

在你的asset_path中添加一个主机参数:

# app/uploaders/image_uploader.rb
def self.default_url()
  ActionController::Base.helpers.asset_path("fallback/" + "avatar_#{rand(1..15).to_s}.jpg", host: 'http://example.com')
end

或者使用 File.open 从文件系统附加文件:

def set_default_avatar!
  path = File.join(Rails.root, 'app/assets/images/fallbak', "avatar_#{rand(1..15).to_s}.jpg")
  File.open(path) do |f|
    @user.avatar = f
  end
end

【讨论】:

  • 感谢您的支持,我可以通过第二种方式上传默认图片。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多