多对多关联外键变更集错误

many to many association foreign key changeset error

对于 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 会更好。