This project is archived and is in readonly mode.
Error in AR::AssociationPreload::ClassMethods#preload_associations when records are from multiple classes
Reported by acechase | July 3rd, 2008 @ 04:39 PM | in 2.x
This is a similar problem to the one I created a ticket for earlier, here:
http://dev.rubyonrails.org/ticke...
which was subsequently fixed:
http://dev.rubyonrails.org/chang...
However, on further testing I believe that the fix should have been at one level higher up, in #preload_associations, rather than #preload_one_association. I have a forked version of rails where I've made the fix (on the 2.1 branch), which can be seen here (apologies for the debug clutter):
http://github.com/glyde/rails/co...
The error occurs when trying to do an include like this:
find(:all, :includes => {:a => {:b => :c}}
where both :b and :c are polymorphic associations. In this scenario the :b associations are fetched appropriately, but then :c is loaded incorrectly because the #preload_associations method is doing:
parents.first.class.preload_associations(parents, child)
where 'parents' is not guaranteed to contain records of only one type. So what ends up happening is the preload code has the incorrect class_name specified in the conditions for the queries on :c.
I believe that if the parents.group_by change is added to #preload_associations than the similar records.group_by in #preload_one_association can be removed, because all records will be of one type by the time they get to that method.
Unfortunately, I don't have time at the moment to create a proper test case, but hopefully the bug is self-evident when looking at the #preload_associations method in light nested polymorphic includes.
Comments and changes to this ticket
-
josh October 5th, 2008 @ 03:17 PM
- State changed from new to stale
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>
Referenced by
- 1554 fix to eager loading on polymorphic associations is this the problem you were describing in #546 ?
- 1554 fix to eager loading on polymorphic associations It's a similar problem. In #546 the problem was that the ...