我知道两者之间的区别; assoc_constraint
使用ecto架构验证外键约束,foreign_key_constraint
使用db。
为什么你会在这种情况下使用assoc_constraint
?
答案 0 :(得分:5)
如果您查看assoc_constraint
和foreign_key_constraint
的来源,您会看到他们以非常相似的add_constraint
(私人函数)调用结束
assoc_constraint:
add_constraint(changeset, :foreign_key, to_string(constraint),
:exact, assoc, {message, []})
foreign_key_constraint:
add_constraint(changeset, :foreign_key, to_string(constraint),
:exact, field, {message, []})
两者之间的唯一区别是,对于foreign_key_constraint
,您给出约束的确切名称,对于assoc_constraint
,您给出关联的名称,函数计算外键名称本身(使用与Ecto迁移相同的约定)。除此之外,两者的工作方式相同。 assoc_constraint
只是一个便利功能,因此您不必使用约束的确切名称,该约束的长度超过关联名称。