在Ecto中何时应该使用assoc_constraint vs foreign_key_constraint

时间:2017-10-31 15:26:46

标签: elixir phoenix-framework ecto

我知道两者之间的区别; assoc_constraint使用ecto架构验证外键约束,foreign_key_constraint使用db。

为什么你会在这种情况下使用assoc_constraint

1 个答案:

答案 0 :(得分:5)

如果您查看assoc_constraintforeign_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只是一个便利功能,因此您不必使用约束的确切名称,该约束的长度超过关联名称。