gpt4 book ai didi

elixir - 具有嵌入式模式的唯一约束

转载 作者:行者123 更新时间:2023-12-04 16:47:20 27 4
gpt4 key购买 nike

有没有什么方法可以让一个唯一约束适用于嵌入式模式?

下面给定的代码给出了异常:

cannot add constraint to changeset because it does not have a source

name 字段来自persons 字段,email 字段来自accounts

架构:

embedded_schema do
field :name
field :email
end

变更集:

struct
|> Ecto.Changeset.cast(params, [:name, :email])
|> Ecto.Changeset.validate_required([:name, :email])
|> Ecto.Changeset.unique_constraint(:email)

我尝试将模式 accounts 作为参数提供,但没有成功。

最佳答案

Is there any way to get a unique constraint working for an embedded schema?

简短的回答是否定的。

Ecto 的 unique_constraint 依赖于数据库。为了工作,您需要为给定字段添加唯一索引。该约束只会将数据库错误转换为变更集错误。您可以在文档中阅读更多信息 https://hexdocs.pm/ecto/Ecto.Changeset.html#unique_constraint/3

编辑:

使用 embedded_schema 意味着您不能在 email“字段”上有唯一索引,因为它本身不是字段。 Ecto 使用单个 jsonb 字段来存储嵌入数据。

您可以创建一个与数据库相关的 Account 模式。然后您可以手动将数据映射到帐户变更集并对其使用 unique_constraint

关于elixir - 具有嵌入式模式的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38041296/

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