2014-01-30 79 views
0

我有ArtworkUploader,並且我想在同一個目錄中創建圖形圖像的副本。幫我解決這個問題。複製圖像carrierwave

我上傳:

class ArtworkUploader < CarrierWave::Uploader::Base 
    def store_dir 
    if model 
     "uploads/#{model.class.to_s.underscore}/#{model.id}/#{mounted_as}" 
    end 
    end 

    def filename 
    "artwork.png" 
    end 
end 

我試圖與控制檯,但它不工作。我在這裏錯過了什麼?

控制檯:

> u = User.find(5) 
> u.artwork.create(name: "testing.png", file: u.artwork.path) 
> NoMethodError: undefined method `create!' for /uploads/5/artwork/Artwork:ArtworkUploader 
+0

這是什麼意思的副本,你的意思是修改已經上傳的現有文件 – Viren

+0

我想用我的自定義文件名與原始文件一起獲取圖像。 – Mano

+0

爲什麼不創建另一個文件並將相同的上傳器應用到它 – Viren

回答

0

有我能想到的,你可以做2方式

一)VIA版本: 創建文件的版本

​​

和現在只需在您的上傳器中定義create_a_copy方法即可返回相同的文件

這樣你可以有一個文件。我的副本不明白你的custom filename東西,但你必須定義的方式爲您上傳filename方法,你可以做到這一點同樣爲version,以及這樣的事情

version: copy_file do 
     process :create_a_copy 
     def filename 
      "testing.png" 
     end 
     end 

注: 不知道的東西,文件名的版本的文件,因爲我做了很長回來,但我相信不同filename方法的上述設置是可行的。

Adavantage:

  • 所有文件,複製在一個上傳
  • 沒有額外的列數據庫(它在B方法需要)

需要現在上面的方法太相關有一些注意事項在它

  • 稍微複雜
  • 單刪除問題,刪除對原始上傳會刪除其副本以及

B)通過單獨列: 他們其他的方式可以實現,它定義稱爲artwork_copy一個單獨的列,並裝入相同上傳只需稍微在你上傳改變這樣

def filename 
    if self.mounted_as == :artwork 
     "artwork.png" 
    else 
     "testing.png" 
    end 
    end 

你附加的文件的方式(給你的文件存儲在本地)

u = User.find(5) 
u.artwork_copy = File.open(u.artwork) ## Just cross check 
u.save 

有一個你做到這一點通過做另一種方式與上文相同

u = User.find(5) 
    u.artwork_copy.store!(File.open(u.artwork)) 

現在它很明顯是什麼優勢/上述

希望這有意義的B方法提到的缺點