我會implemente,要麼有一個回調(如果它被調用爲每個文件)或進程(如果回調函數被調用一次爲所有文件),對上傳:
Carrierwave Callbacks
your_uploader.rb
after :store, :save_json_info
或
process :save_json_info
def save_json_info
info = model.json_field
info[filename] = {
url: ...,
name: ...
}
model.update!(json_field: info)
end
(上傳你內心真正的基準而被保存爲文本model
模型)
然後,你可以通過 訪問它們(外你會替代型號爲它的實際名稱...)
name = model.avatar[0].file.filename
或
name = model.avatar[0].split('/')[-1] #this is a hacky way of getting the filename, by splitting the url address and getting the last element of the split
model.json_field[name]
(我不知道這是正確的方式來訪問carrierwave上的多個文件,但無論它是什麼樣的應該是類似的)
編輯: 也許最好的辦法是讓json字段是一個數組,以及在處理文件時,在該字段上簡單地使用< < {url:'...',name:'....'}。然後當你循環遍歷文件來顯示它們時,你可以循環索引並獲取相應的json值。所以,在你上傳
你會:
def save_json_info
model.json_field << {
url: ...,
name: ...
}
model.save!
end
然後,如果你通過圖片循環,.each_with_index例如,你可以使用索引來訪問model.json_field [1]。由於我想象文件將在處理數組文件時被添加到數組文件中,因此將它們推入同一循環中的info_json數組字段將爲這兩個文件提供相同的索引。你需要照顧他們何時被刪除。
你是要求多個文件存儲還是隻爲元數據(網址,名稱)? –
我需要多個文件存儲,但每個文件都有獨立的文件字段,並且需要一起添加少量附加文本字段。因此,包含文件和文本字段的每個組都是我的表列中的一個嵌套json。 – user3454914