2016-11-26 62 views
0

很多网友都问同样的问题,但我叠..carrierwave默认图像更新选择和上传

的Rails:4.2.5

Carrierwave

Cloudinary

我想当创建用户时,将默认图片上传为默认图片。

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 /'中的随机图像路径。

我把网址放在user.avatar中,用户头像已经更新为NULL。 没有图像上传到Cloudinary。

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

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

但是我不能上传一个图像作为上述逻辑的默认头像。

我冲掉了Carrierwave的文档,但它不适用于我。

我相信我的代码中缺少某些东西。

任何帮助非常感谢。

+0

那些是后备预先上传到Cloudinary的图像?为什么每次用户被分配时都需要重新上传? AFAIU您应该使用PreloadedFile类的用例。请参阅:http://cloudinary.com/documentation/rails_image_upload –

回答

0

它没有上传文件,因为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 
+0

感谢您的支持,我可以通过第二种方式上传默认图片。 –