gpt4 book ai didi

elixir - 使一个字段在 ecto 中独一无二

转载 作者:行者123 更新时间:2023-12-03 08:53:26 24 4
gpt4 key购买 nike

如何制作字段unique在 ecto?

我认为它与 Ruby 中的事件记录相同,但似乎不是

最佳答案

您想使用 unique_constraint/3 。这不像 Active Record,因为它使用数据库来确保唯一性。 Active Record 会查询具有相同值的记录,如果有任何返回,则它将失败。这有一个竞争条件,如果在提取以检查唯一性和插入记录之间插入一个值,您将最终得到重复数据或引发错误(取决于是否在数据库上设置了索引。unique_constraint/3没有这种竞争条件。

值得注意的一件事是,由于在尝试插入之前不知道唯一性,因此唯一约束将在您的验证之后发生。不可能同时显示验证和约束错误。

您使用的数据库也必须支持唯一约束。它们不适用于 SQLite。您可以在 GitHub issue 上阅读更多内容。

在您的迁移中:

create unique_index(:users, [:email])

然后在你的模型中:
cast(user, params, ~w(email), ~w())
|> unique_constraint(:email)

值得注意的是,Ecto 过去曾提供一个 validate_unique/3 函数,该函数通过对数据库进行查询来工作,但它已被弃用,取而代之的是 unique_constraint/3version 0.16.0

关于elixir - 使一个字段在 ecto 中独一无二,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460920/

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