Elixir EXTO:基于现有行创建新行

Elixir EXTO:基于现有行创建新行,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我正在尝试复制带有更改的postgres行链接是现有行。我尝试过各种排列,但无法创建变更集-欢迎帮助 我正在使用这个版本的外星生物 :phoenix_ecto, "~> 3.0-rc"` 这个密码呢 IO.inspect(link) changeset = link |> Map.from_struct # |> Map.delete(:id) |&

我正在尝试复制带有更改的postgres行<代码>链接是现有行。我尝试过各种排列,但无法创建变更集-欢迎帮助

我正在使用这个版本的外星生物

:phoenix_ecto, "~> 3.0-rc"`
这个密码呢

        IO.inspect(link)
        changeset =
            link
            |> Map.from_struct
            # |> Map.delete(:id)
            |> Upload.persist_changeset(params)
        # new_link =
        #     Map.put link, :file_names, params["file_names"]
        # case Repo.insert new_link do
        case Repo.insert changeset do
            {:ok, link} ->
                render conn, "link.json", link: link.link
            {:error, changeset} ->
                ...
        end

检查

%Api.Upload{__meta__: #Ecto.Schema.Metadata<:loaded, "uploads">,
 email: "hotbelgo@gmail.com", estimate_ids: [1],
 file_names: ["f1.pdf", "f2.pdf"], id: 8,
 inserted_at: #Ecto.DateTime<2016-08-04 10:01:21>,
 job: #Ecto.Association.NotLoaded<association :job is not loaded>, job_id: 1,
 link: "na2ClfJie4PsYC4y8Lr9",
 template: #Ecto.Association.NotLoaded<association :template is not loaded>,
 template_id: nil, updated_at: #Ecto.DateTime<2016-08-04 14:21:58>,
 upload_type: "Artwork"}

我找到了一个解决方案,尽管我不确定这是不是最好的方法

        update_params =
            link
            |> Map.from_struct
            |> Map.put :file_names, params["file_names"]
            changeset =
                Upload.changeset(%Upload{}, update_params)

这是否有效:
changeset=Upload.persist\u changeset(%%{link | id:nil},params)
?现在我得到:
请在强制转换或更改结构之前预加载关联。我理解此消息并不真的想预加载
作业
,因为我只想保留
作业id
您可以在问题中包含
IO.inspect(link)
的输出吗?
文件名
是您想要从
参数
中获取的唯一字段吗?是的。基本上,记录包含一个唯一的、不可猜测的链接和一些其他ID。它支持与第三方共享的Web链接,使他们能够将文件上载到我的网站。我想允许重复使用链接,但要存储每次上载的文件名,因此需要复制现有数据,但要更改:文件名
defmodule MosaicApi.Upload do
  use MosaicApi.Web, :model

  schema "uploads" do
    belongs_to :job, MosaicApi.Job
    belongs_to :template, MosaicApi.Template
    field :estimate_ids, {:array, :integer}

    field :upload_type, :string
    field :file_names, {:array, :string}

    field :link, :string
    field :email, :string

    timestamps
  end
        update_params =
            link
            |> Map.from_struct
            |> Map.put :file_names, params["file_names"]
            changeset =
                Upload.changeset(%Upload{}, update_params)