如何复制arc_ecto上传

时间:2017-09-12 15:17:01

标签: elixir phoenix-framework ecto arc-ecto

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

管理此方案的正确方法是什么?任何提示?

1 个答案:

答案 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,因此路线不正确。我将重复元素的插入和徽标更新分成两个步骤。