我有兩種模式:用戶和組。它們通過連接表與很多人聯繫起來。試圖刪除模型時elixir刪除多對多關聯
**(Ecto.ConstraintError)約束錯誤:
* foreign_key: groups_user_id_key
我應該怎麼做才能 當我嘗試刪除用戶(或一組),它提出了這個錯誤刪除任何父模型?
我有兩種模式:用戶和組。它們通過連接表與很多人聯繫起來。試圖刪除模型時elixir刪除多對多關聯
**(Ecto.ConstraintError)約束錯誤:
* foreign_key: groups_user_id_key
我應該怎麼做才能 當我嘗試刪除用戶(或一組),它提出了這個錯誤刪除任何父模型?
該數據庫將引發這樣的錯誤,因爲連接表仍持有用戶/組你想刪除的參考。 有該問題的多個解決方案:
on_delete: :delete_all
選項references(table, on_delete: :delete_all)
的外鍵約束定義中的遷移,在數據庫中設置ON DELETE CASCADE
選項。你可以在這裏找到更多關於這個外生文檔中:http://hexdocs.pm/ecto/Ecto.Schema.html#has_many/3這裏:http://hexdocs.pm/ecto/Ecto.Migration.html#references/2
has_many :groups, MyApp.User, on_delete: :nilify_all
:on_delete
選項
有當父被刪除,你可以爲你的協會設置四種不同的行爲:
:什麼 - 什麼都不做的關聯;
:delete_all - 刪除所有關聯而不觸發生命週期回調;
:nilify_all - 爲每個關聯設置模型引用爲nil,而不觸發任何生命週期回調;
:fetch_and_delete - 顯式提取所有關聯並逐個刪除它們,觸發before_delete和after_delete回調; 請記住,這些選項僅適用於has_many/3宏。