我会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