TL;DR
Based on this excellent blog post, Many to many relationships with Ecto by Nuno Marinho, we successfully implemented many-to-many relations in our application. However, we needed a feature that required removing (deleting) many-to-many relations without deleting entities involved in this relation.
Deleting Many-To-Many Relation in Elixir Ecto
In Nuno post, you can find four steps on how to do proper many-to-many relation between Projects
and Users
using Elixir Ecto powers. However, one step is missing, how to remove the relation between Projects
and Users
.
The Wrong Way
Our first implementation was to do:
user
|> User.changeset_update_projects(projects)
|> Repo.update()
but that also deleted a User
record.
Then we found this excellent advice on the Elixir forum:
Repo.delete/2 expects a changeset_or_struct as the first argument. It looks like you’re piping an #Ecto.Query ( ie.queryable) into it. I believe delete_all/2 66 is what you’re looking for.
without the query implementation.
The Query For Deleting Many-To-Many Relation In Elixir Ecto