Hello, I’m getting the following error while running a unit test that deletes an “artist” entity that has “tag” associations (the desired behavior is for the associations to be deleted when the parent is deleted).
** (Ecto.ConstraintError) constraint error when attempting to delete struct:
* artist_tags_artist_id_fkey (foreign_key_constraint)
If you would like to stop this constraint violation from raising an
exception and instead add it as an error to your changeset, please
call `foreign_key_constraint/3` on your changeset with the constraint
`:name` as an option.
The changeset has not defined any constraint.
code: assert {:ok, %Artist{}} = Artists.delete_artist(artist)
stacktrace:
(ecto 3.2.5) lib/ecto/repo/schema.ex:689: anonymous fn/4 in Ecto.Repo.Schema.constraints_to_errors/3
(elixir 1.10.0) lib/enum.ex:1396: Enum."-map/2-lists^map/1-0-"/2
(ecto 3.2.5) lib/ecto/repo/schema.ex:674: Ecto.Repo.Schema.constraints_to_errors/3
(ecto 3.2.5) lib/ecto/repo/schema.ex:451: anonymous fn/10 in Ecto.Repo.Schema.do_delete/4
test/narktar/artists_test.exs:75: (test)
This is the migration used to create the join-table “artist_tags” where I use on_delete: :delete_all
def change do
create table(:artist_tags) do
add :artist_id, references(:artists, on_delete: :delete_all), null: false
add :tag_id, references(:tags, on_delete: :delete_all), null: false
timestamps()
end
create unique_index(:artist_tags, [:artist_id, :tag_id])
end
I verified there is CASCADE ON DELETE on the foreign key constraint in the Postgres database, and have no problems deleting artists (and their associated tags) manually with queries against Postgres.
I feel Iike I might be missing something simple and any help would be appreciated. I can also post any more details regarding the parent schemas if that would be useful.