私は2つの違いを知っています。 assoc_constraint
はectoスキーマを使用して外部キー制約を検証し、foreign_key_constraint
はdbを使用します。Ectoではassoc_constraintとforeign_key_constraintのどちらを使うべきか
なぜこの場合、assoc_constraint
を使用しますか?
私は2つの違いを知っています。 assoc_constraint
はectoスキーマを使用して外部キー制約を検証し、foreign_key_constraint
はdbを使用します。Ectoではassoc_constraintとforeign_key_constraintのどちらを使うべきか
なぜこの場合、assoc_constraint
を使用しますか?
あなたは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
は便宜上の関数なので、制約の正確な名前はアソシエーション名よりも長い必要はありません。