我使用 mongoid,用 carrierwave 存储信息。 前面犯二,将一个图片格式的信息,通过 embed 嵌入表的形式存储了。每次做操作的时候都非常痛苦。 今天下决心将所有的数据,重新导到了外面,变成了一个独立的表,从 embeds_many,变成了 has_many 结果发现,所有的图片都取不出来了。 还为此打电话去七牛。
各种方法都试了一遍,最后突然想起来,carrierwave 的路径名,是自己生成的。 数据库里面只有一个字段,就是最终的文件名。
def store_dir
"#{mounted_as}/#{model.id}/"
end
uploader 模块中有上面这个函数。 我重新倒了一遍数据库,model.id 变化了。 于是原来存储的所有文件,路径都错了。
还在折腾中。应该问题不大了。
切忌,尽量少在 mongid 里面使用嵌入表,查询修改都很麻烦。 在使用 carrierwave 的时候,各种文件名,都是计算出来的。比如远程的 url,就是路径加上数据库字段里面存储的文件名。 如果有 avatar 之类的图像版本,就再把这个前缀加到文件名里面去。就是这样神奇。
一直希望可以在 mongoid 里面使用 ActiveStorage,不过这么长时间了,好像一直都没有人去折腾。