Ruby Forum Ruby on Rails > Information about query caching and HM through

Posted by aJo aJo (jub)
on 04.03.2008 12:28
Hi there,

I would like to find more information about query caching, or about the
concept behind the following behavior, in a "User has many Groups
through Memberships" association.
Let me show you an example.

# Base :

user = User.find_by_email('john.doe@example.org')
group = List.create( :title => "First group" )
group2 = List.create( :title => "Second group" )

# if I do this :

Membership.create(:group => group, :user => user)
Membership.create(:group => group2, :user => user)

user.groups.each do |g| puts g.title end

# the result is as expected
First group
Second group

# But if do this :

Membership.create(:group => group, :user => user)
user.groups.each do |g| puts g.title end
Membership.create(:group => group2, :user => user)
user.groups.each do |g| puts g.title end

# the result is :
First group
First group

# instead of
First group
First group
Second group

What's the magic behind that ?
Also, what's the best way to create new memberships and avoid troubles ?

Thanks
Posted by Frederick Cheung (Guest)
on 04.03.2008 12:46
(Received via mailing list)
On 4 Mar 2008, at 11:28, aJo aJo wrote:

>
>
>
This isn't a query caching problem, it's activerecord's association
caching (so if you were to add a user.reload or a user.groups.reload
in there you would get the right answer)

Fred
Posted by aJo aJo (jub)
on 04.03.2008 13:03
OK, I indeed found that a .reload could do the trick.

But I suppose we are not condemned to do a .reload before every call to 
an association, so how do you avoid that ?