2016-11-26 38 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

感謝您的支持,我可以通過第二種方式上傳默認圖片。 –