Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

Eager association loading sanitizes conditions using the wrong table

#1101

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.

Reported by Will Bryant · September 24th, 2008 @ 10:59 AM

State: committed
Milestone: 2.x
Assigned to: nobody
Importance: none

Activity

  1. Will Bryant
    Will Bryant

    For the convenience of anyone who needs to patch this on their project running the released version of rails, here's a backport against your frozen-in vendor/rails 2.1.1.

    September 24th, 2008 @ 11:02 AM

  2. Will Bryant
    Will Bryant

    Erm, ignore the ticket number in that second filename :).

    September 24th, 2008 @ 12:14 PM

  3. Will Bryant
    Will Bryant

    Backported to the 2-1-stable repository, since that's diverged from 2.1.1 release far enough for that not to apply.

    September 27th, 2008 @ 05:04 AM

  4. Repository
    Repository

    (from [7823c50c975df975ca3237bfbe9ca0b3c60f6b6d]) fix eager loading's :condition sanitizing expanding against the wrong table

    Signed-off-by: Michael Koziarski michael@koziarski.com [#1101 Eager association loading sanitizes conditions using the wrong table state:commited] http://github.com/rails/rails/co...

    September 29th, 2008 @ 04:52 PM

  5. Frederick Cheung
    Frederick Cheung
    • Tag changed from 2.1, activerecord, bug, eager_loading, edge, has_many, patch to 2.1, activerecord, bug, eager_loading, edge, has_many, patch
    • State changed from new to committed

    December 14th, 2008 @ 06:40 PM