My User schema has the following associations
has_many(:user_acts, UserAct)
many_to_many(:acts, Act, join_through: UserAct)
I want to select users which have at least 3
user_acts
matching condition(user_acts.act_id in current_user_act_ids
.
My current query:
current_user_act_ids = Act
|> select([a], a.id)
|> join(:inner, [a], ua in assoc(a, :user_acts))
|> join(:inner, [a, ua], u in assoc(ua, :user))
|> where([a, ua, u], u.id == ^current_user.id)
|> distinct(true)
User
|> join(:inner, [u], ua in assoc(u, :user_acts))
|> join(:inner, [u, ua], a in assoc(ua, :act))
# something_must_be_here
|> distinct(true)