Gaz*_*ler 65
您想使用unique_constraint/3.这与Active Record不同,因为它使用数据库来确保唯一性.Active Record会对具有相同值的记录进行查询,如果有任何返回,则会失败.这具有这样,如果一个值被插入取来检查的独特性和插入你的记录之间的竞争条件,你要么出现重复的数据或正在引发错误(取决于如果索引在数据库上设置或不.unique_constraint/3
不没有这种竞争条件.
值得注意的是,由于在尝试插入之前不知道唯一性,因此在验证之后将发生唯一约束.无法同时显示验证和约束错误.
您使用的数据库也必须支持唯一约束.它们不适用于SQLite.您可以阅读有关GitHub问题的更多信息.
在您的迁移中:
create unique_index(:users, [:email])
Run Code Online (Sandbox Code Playgroud)
然后在你的模型中:
cast(user, params, ~w(email), ~w())
|> unique_constraint(:email)
Run Code Online (Sandbox Code Playgroud)
值得一提的是,外生用于提供validate_unique/3
该工作通过对数据库进行查询的功能,但它是在赞成不赞成unique_constraint/3
在版本0.16.0
归档时间: |
|
查看次数: |
12738 次 |
最近记录: |