有人可以帮我理解变更集验证如何与关联一起使用,以便一次显示所有变更集关联错误吗?
我在下面创建了一些示例来解释。
请注意,如果Post
具有无效的变更集,但其Comment/Like
关联的变更集也应该无效,则结果变更集仅验证了Post属性:
Post.create_changeset(%Post{}, %{title: ""})
|> Ecto.Changeset.put_assoc(:comments, comments_changeset)
|> Ecto.Changeset.put_assoc(:likes, likes_changeset)
|> Repo.insert
#ecto.Changeset<action: :insert,
changes: %{
comments: [#ecto.Changeset<action: :insert, changes: %{text: nil}, errors: [], data: #Comment<>, valid?: true>],
likes: [#ecto.Changeset<action: :insert, changes: %{up: nil}, errors: [], data: #Like<>, valid?: true>]
},
errors: [title: {"can't be blank", [validation: :required]}],
data: #Post<>, valid?: false>
否则,当帖子符合标题并且有效时,现在结果更改集会显示相关Comment
的错误,但不会显示错误。
Post.create_changeset(%Post{}, %{title: "now i have a title"})
|> Ecto.Changeset.put_assoc(:comments, comments_changeset)
|> Ecto.Changeset.put_assoc(:likes, likes_changeset)
|> Repo.insert
#ecto.Changeset<action: :insert,
changes: %{
comments: [#ecto.Changeset<action: :insert, changes: %{text: nil}, errors: [title: {"can't be blank", [validation: :required]}], data: #Comment<>, valid?: false>],
likes: [#ecto.Changeset<action: :insert, changes: %{up: nil}, errors: [], data: #Like<>, valid?: true>]
},
errors: [], data: #Post<>, valid?: false>
它表现为某种&#34;懒惰的验证&#34;。这预计在Ecto中是这样的吗?