我的Phoenix应用程序的一个模型有一个徽标,使用arc_ecto
并上传到S3。
我正在复制其中一条记录,我希望它与徽标具有相同的图像。
在我的变更集中,我有:
|> cast_attachments(params, [:logo])
原始项目的徽标价值为:
iex(21)> MyRepo.get(MyModel, 1).logo
%{file_name: "mylogo.png",
updated_at: #Ecto.DateTime<2017-09-12 12:31:58>}
但是如果我尝试直接设置它,我会收到一个错误(Arc.File.new不接受该结构,这是有道理的。)
我也试过提取原始徽标的S3网址。这没有返回错误,但也没有添加徽标:
iex(22)> MyRepo.get(MyModel, 2).logo
nil
管理此方案的正确方法是什么?任何提示?
答案 0 :(得分:0)
我设法解决了这个问题,但有两件事缺失了:
1 - 需要将allow_paths: true
添加到cast_attachments
|> cast_attachments(params, [:logo], allow_paths: true)
2 - 我在上传者中有这个:
def storage_dir(_version, {_file, my_model}) do
"/my_models/#{my_model.id}/logo/"
end
所以我使用id设置存储路由。当我复制元素时,我仍然没有ID,因此路线不正确。我将重复元素的插入和徽标更新分成两个步骤。