Information about query caching and HM through

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(‘[email protected]’)
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

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

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 ?