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.

[patch] Ensure necessary included tables are joined in construct_finder_sql_for_association_limiting

#109

Currently selecting limited ids for eager loading associations is broken when there is a condition or an order-by based on a table that is not directly joined to the main active record table.

so if I have:

class Person
  has_many :items
end

class Item
  belongs_to :person
  has_one :another_item
end

class AnotherItem
  belongs_to :item
end

Person.find(:all, 
            :include=>{:items=>:another_item}, 
            :order=>" another_items.name ASC ",
            :limit=>4)

The find will fail because the join to table items will not be included.

The patch adds methods to the join_dependency to look up joins by aliased table name, and get an array of the joins required to reach that table.

Reported by John Devine · May 4th, 2008 @ 07:25 PM

State: resolved
Milestone: none
Assigned to: nobody
Importance: none

Activity

  1. Frederick Cheung
    Frederick Cheung

    +1. tests all pass, looks sane (also see discussion on trac)

    May 6th, 2008 @ 10:26 AM

  2. Repository
    Repository
    • State changed from new to resolved

    (from [8ded457b1b31b157d6fe89b553749579e5ac4a27]) Added logic to associations.rb to make sure select_for_limited_ids

    includes joins that are needed to reach tables listed in the :order

    or :conditions options if they are not joined directly to the main

    active_record table.

    Signed-off-by: Michael Koziarski

    [#109 state:resolved]

    http://github.com/rails/rails/co...

    May 6th, 2008 @ 11:01 AM