Adz*_*dzz 2 elixir ecto phoenix-framework
我知道两者之间的区别; assoc_constraint使用ecto模式验证外键约束,foreign_key_constraint使用db.
你为什么要用assoc_constraint这种情况?
如果你看一下源assoc_constraint和foreign_key_constraint,你会发现它们具有非常相似的呼叫结束add_constraint(私人功能)
assoc_constraint:
add_constraint(changeset, :foreign_key, to_string(constraint),
:exact, assoc, {message, []})
Run Code Online (Sandbox Code Playgroud)
foreign_key_constraint:
add_constraint(changeset, :foreign_key, to_string(constraint),
:exact, field, {message, []})
Run Code Online (Sandbox Code Playgroud)
两者之间的唯一区别是,因为foreign_key_constraint您给出了约束的确切名称,因此assoc_constraint,您给出了关联的名称,函数计算外键名称本身(使用与Ecto迁移相同的约定).除此之外,两者的工作方式相同.assoc_constraint只是一个便利函数,因此您不必使用约束的确切名称,该约束比关联名称更长.