For many_to_many - the function receives the IDs of the parent association and it must return a tuple with the parent id as the first element and the association map or struct as the second. For example, if a post has many tags, when preloading the tags with a custom function, the function will receive a list of "post_ids" as the argument and it must return a tuple in the format of {post_id, tag}
By experimentation I’ve figured out that parent here refers to the post itself. Which leads to my first question.
Why does Repo.preload(my_post, tags: &my_custom_preloader/1) call my custom preloader with an array containing the id of my_post? When would it ever get more Ids?
Now to the second source of my confusion: the function will receive a list of "post_ids" as the argument and it must return a tuple in the format of {post_id, tag}
How do I go about transforming many post ids to one post id and one tag if the result somehow is to represent a many-to-many relationship?
I also had some difficulty in understanding them but after watching some videos from @AlchemistCamp I was able to get my ahead around many_to_many relations in Ecto
I am not able to find which video I used on the time, but he has now a beginner series on Ecto and you can watch his video on many_to_many associations to see if you can understand them better, and while doing so you can take some video-notes here:
You can also watch the video directly on his website by following the links in my notes.