gpt4 book ai didi

elixir - ecto:如何使用put_assoc在一个更新中更新和插入关联

转载 作者:行者123 更新时间:2023-12-04 08:23:02 24 4
gpt4 key购买 nike

我正在尝试编写单个变更集,以更新模型并插入关联。我找不到有关如何使用 put_assoc/4 的示例

  order = order
|> Proj.Order.changeset(%{state: "error", error_count: order.error_count + 1})
|> Ecto.Changeset.put_assoc(
:order_errors,
[Proj.OrderError.changeset(%Proj.OrderError{}, %{reason: "not_found"})])
|> Proj.Repo.update!

打印出以下错误:
** (Ecto.InvalidChangesetError) could not perform update because changeset is invalid.

* Changeset changes

%{order_errors: [%Ecto.Changeset{action: :insert, changes: %{id: nil, inserted_at: nil, order_id: nil, reason: "not_found", updated_at: nil}, constraints: [], errors: [order_id: "can't be blank"], filters: %{}, model: %Proj.OrderError{__meta__: #Ecto.Schema.Metadata<:built>, id: nil, inserted_at: nil, order: #Ecto.Association.NotLoaded<association :order is not loaded>, order_id: nil, reason: nil, updated_at: nil}, optional: [], opts: [], params: %{"reason" => "not_found"}, prepare: [], repo: nil, required: [:order_id, :reason], types: %{id: :id, inserted_at: Ecto.DateTime, order_id: :id, reason: :string, updated_at: Ecto.DateTime}, valid?: false, validations: []}], state: "error"}

* Changeset params

%{"error_count" => 1, "state" => "error"}

* Changeset errors

[]

我可以查看 put_assoc/4的任何示例吗?我如何找到变更集为何无效的原因?

这样做的目的是希望新的 order会预先加载 order_errors

最佳答案

我在Ecto tests中找到了使其工作的方法。简而言之,只需删除changeset创建并直接使用新模型即可。

  order = order
|> Proj.Order.changeset(%{state: "error", error_count: order.error_count + 1})
|> Ecto.Changeset.put_assoc(
:order_errors,
[%Proj.OrderError{reason: "not_found"}])
|> Proj.Repo.update!

我仍然想知道如何从原始帖子中了解错误消息

关于elixir - ecto:如何使用put_assoc在一个更新中更新和插入关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35515073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com