2016-11-26 3 views
0

대부분의 사용자가 같은 질문을했다하지만 난 적재하고 업로드 : 4.2.5carrierwave 기본 이미지 업데이트 ..</p> <p>레일을 선택 및

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 /'에있는 임의의 이미지 경로를 반환합니다.

url을 user.avatar에 넣었을 때 사용자 아바타가 NULL로 업데이트되었습니다. Cloudinary에 업로드 된 이미지가 없습니다.

기본적으로 Cloudine 서비스에 이미지를 저장하고 싶습니다.

사용자가 화면에서 사용자 정보를 편집하면 아바타 이미지를 업로드 할 수 있습니다.

그러나 위의 논리에 따라 기본 아바타로 이미지를 업로드 할 수 없습니다.

Carrierwave의 문서를 빨간색으로 표시하지만 나에게 적합하지 않습니다.

내 코드에 뭔가 빠져 있다고 생각합니다.

도움이 매우 감사합니다.

+0

그 대체 있습니까

당신은 두 가지 옵션이 있습니다 Cloudinary에 미리 업로드 된 이미지? 사용자에게 할당 할 때마다 다시 업로드해야하는 이유는 무엇입니까? AFAIU 유스 케이스 당신은 PreloadedFile 클래스를 활용해야합니다. 참조 : http://cloudinary.com/documentation/rails_image_upload –

답변

0

ImageUploader.default_url이 상대 경로를 반환하기 때문에 파일을 업로드하지 않습니다.

# 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를 사용 :

당신의 asset_path에 호스트 매개 변수를 추가 :

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

지원해 주셔서 감사합니다. 두 번째 방법으로 기본 이미지를 업로드 할 수 있습니다. –