如何拯救Ecto.ConstraintError(由唯一性冲突引起 - 我对名为“field”的字符串属性有唯一索引)
以下是我的代码仍在提高错误并且似乎无法解救 - ecto.migration停止:
try do
Repo.insert(model_changeset, on_conflict: :nothing)
rescue
e -> IO.puts(inspect e)
end
还有一点需要注意 - 有时model_changeset不是变更集而是结构 - 我应该总是传递变更集吗?我假设救援条款没关系 - 我应该能够按照我指定的方式解决任何一般错误。
编辑:
以下是相关的错误消息:
%Ecto.ConstraintError{constraint: "cars_field_index", message: "constraint error when attempting to insert struct:\n\n * unique: claims_name_index\n\nIf you would like to convert this constraint into an error, please\ncall unique_constraint/3 in your changeset and define the proper\nconstraint name. The changeset has not defined any constraint.\n", type: :unique}
** (DBConnection.ConnectionError) transaction rolling back
答案 0 :(得分:3)
为变更集unique_constraint / 3(https://hexdocs.pm/ecto/Ecto.Changeset.html#unique_constraint/3)添加唯一约束,它基本上将数据库错误转换为变更集错误。
然后你可以使用案例陈述。
case Repo.insert(model_changeset) do
{:ok, schema} -> schema
{:error, changeset} -> IO.inspect changeset
end