对于has_*
,我们有no_assoc_constraint
。当我们尝试删除父级并且子级仍然存在时,它工作正常并抛出变更集错误。是否有任何功能适用于many to many
。
就像这三种模式一样
schema "facilities" do
field(:name, :string)
field(:description, :string)
field(:is_active, :boolean, default: true)
many_to_many(:users, User, join_through: "users_facilities")
end
schema "users_facilities" do
belongs_to(:user, User, primary_key: true)
belongs_to(:facility, Facility, primary_key: true)
end
schema "users" do
field(:first_name, :string)
field(:last_name, :string)
field(:email_address, :string)
field(:username, :string)
many_to_many(:facilities, Facility, join_through:
"users_facilities")
我什么时候尝试删除user_facilities中存在外键的工具。我想得到变更集错误。
谢谢
所以经过一些挖掘,我发现我们可以使用foreign_key_constraint
为任何类型的关联生成变更集错误,方法是提供这样的外键名称
record
|> Ecto.Changeset.change()
|> Ecto.Changeset.foreign_key_constraint(:users, name: :users_facilities_facility_id_fkey,
message: "are still associated with id}"
)
它有效,但我认为如果我们不必每次都明确指定name: foreign_key_name
会更好。