This project is archived and is in readonly mode.

#1101 ✓committed
Will Bryant

Eager association loading sanitizes conditions using the wrong table

Reported by Will Bryant | September 24th, 2008 @ 10:59 AM | in 2.x

If you have an association with conditions in hash form:


class Project < ActiveRecord::Base
  has_many :tasks, :conditions => {:deleted_at => nil}
end

class Task < ActiveRecord::Base
  belongs_to :project
end

and you eagerly load the association:


  Project.find(:all, :include => :tasks)

then the deleted_at column in the condition gets expanded out to projects.deleted_at - when it should be tasks.deleted_at.

This is bad... if you're lucky it means these loads fail, if you're unlucky and have the same-named columns on the owner table, your app just misbehaves badly.

The attached patch calls the sanitiized_conditions method on the reflection which proxies the sanitize_sql call through to the target class, not the owner class, fixing this.

This bug is present in 2.1.0, 2.1.1, and edge. The attached patch is against edge. The first of the two commits in the patch is an additional test case showing the issue.

Comments and changes to this ticket

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>

People watching this ticket

Referenced by

Pages