在 Ecto 中,我什么时候应该使用 assoc_constraint 与 foreign_key_constraint
In Ecto when should I use assoc_constraint vs foreign_key_constraint
我知道两者的区别; assoc_constraint
使用 ecto 模式来验证外键约束,foreign_key_constraint
使用数据库。
为什么在那种情况下你会使用 assoc_constraint
?
如果您查看 assoc_constraint
and 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
只是一个方便的函数,因此您不必使用比关联名称长的约束的确切名称。
我知道两者的区别; assoc_constraint
使用 ecto 模式来验证外键约束,foreign_key_constraint
使用数据库。
为什么在那种情况下你会使用 assoc_constraint
?
如果您查看 assoc_constraint
and 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
只是一个方便的函数,因此您不必使用比关联名称长的约束的确切名称。