使用 Ecto 同时显示常见的和数据库特定的验证错误

Showing the usual and database specific validation errors at the same time with Ecto

假设我有某种形式,它有电子邮件和密码字段以及 2 个验证:电子邮件必须是唯一的,密码不应少于 8 个字符。

当我使用 Repo.InsertRepo.update 或任何其他类似的方法时,我首先得到与数据库无关的验证错误(少于 8 个字符的密码) 并且仅当密码正确时,它才会访问数据库并发现电子邮件已经存在并将其再次添加到变更集错误中。

所以如果用户发送一个已经存在的电子邮件和一个短密码的表单,他只会得到关于后者的错误,有没有办法总是访问数据库以获得通常的和特定于数据库的同时出错?

你不能这样做,因为你可能会得到漏报或者可能导致其他错误。例如,如果电子邮件为空,我们如何验证它是唯一的?事实上,如果您在数据库中将电子邮件标记为 NOT NULL,您的数据库甚至可能出错。