# Has many through : dynamic join on creation

**URL:** <https://www.ruby-forum.com/t/has-many-through-dynamic-join-on-creation/130834>\
**Category:** Rails\
**Created:** [March 3, 2008, 7:33pm UTC](https://www.ruby-forum.com/t/has-many-through-dynamic-join-on-creation/130834 "2008-03-03T19:33:46Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![jub](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/f9ae1b/32.png) [@jub](https://www.ruby-forum.com/u/jub)\
**Post date:** [March 3, 2008, 7:33pm UTC](https://www.ruby-forum.com/t/has-many-through-dynamic-join-on-creation/130834/1 "2008-03-03T19:33:46Z")

</div>

Hello,

I have a User ActiveRecord model and a Group AR model joined by has\_many  
:through Membership. It’s not a HBTM because I need an extra attribute  
for the memberships.

I tried to fill my dev site with some data added via a migration file. I  
want to create two groups, and add a user to them. Below is the code I  
use, and a description of the behaviour I don’t understand.

Code : - fold - unfold

1. user = User.find\_by\_email(‘removed\_email\_address@domain.invalid’)
2. 
3. group = Group.new
4. group.title = “First group”
5. group.save(false)
6. 
7. membership = Membership.new
8. membership.group = group
9. membership.user = user
10. membership.credit = 10
11. membership.save(false)
12. 
13. puts “membership 1”
14. user.groups.each do |g| puts g.title end
15. 
16. 
# No problem here, output is :
17. 
# membership 1
18. 
# First group
19. 
20. group2 = Group.new
21. group2.title = “Second group”
22. group2.save(false)
23. 
24. membership2 = Membership.new
25. membership2.group = group2
26. membership2.user = user
27. membership2.credit = 15
28. membership2.save(false)
29. 
30. puts “membership 2”
31. user.lists.each do |g| puts g.title end
32. 
33. 
# Output is only :
34. 
# membership 2
35. 
# First group
36. 
37. user2 = User.find\_by\_email(‘removed\_email\_address@domain.invalid’)
38. 
39. puts “memberships”
40. user2.groups.each do |g| puts g.title end
41. 
42. 
# Output is :
43. 
# memberships
44. 
# First group
45. 
# Second group

Why was my first group dynamically added to the user’s groups, and not  
the second one ?

Thank you for your attention

---

<div class="post-metadata">

**Author:** ![jub](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/f9ae1b/32.png) [@jub](https://www.ruby-forum.com/u/jub)\
**Post date:** [March 4, 2008, 12:58am UTC](https://www.ruby-forum.com/t/has-many-through-dynamic-join-on-creation/130834/2 "2008-03-04T00:58:39Z")

</div>

Maybe a caching weirdness ?  
Is my explanation clear enough ?
