Skip to content

Commit

Permalink
Ensure hm:t preloading honours reflection options. [rails#137 state:r…
Browse files Browse the repository at this point in the history
…esolved]

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
  • Loading branch information
fcheung authored and lifo committed May 11, 2008
1 parent 8f2f88f commit 3f0dccb
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 5 deletions.
2 changes: 2 additions & 0 deletions activerecord/CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
*SVN*

* Ensure hm:t preloading honours reflection options. Resolves #137. [Frederick Cheung]

* Added protection against duplicate migration names (Aslak Hellesøy) [#112]

* Base#instantiate_time_object: eliminate check for Time.zone, since we can assume this is set if time_zone_aware_attributes is set to true [Geoff Buesing]
Expand Down
11 changes: 6 additions & 5 deletions activerecord/lib/active_record/association_preload.rb
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,8 @@ def preload_has_many_association(records, reflection, preload_options={})
through_primary_key = through_reflection.primary_key_name
unless through_records.empty?
source = reflection.source_reflection.name
through_records.first.class.preload_associations(through_records, source)
#add conditions from reflection!
through_records.first.class.preload_associations(through_records, source, reflection.options)
through_records.each do |through_record|
add_preloaded_records_to_collection(id_to_record_map[through_record[through_primary_key].to_s],
reflection.name, through_record.send(source))
Expand Down Expand Up @@ -251,12 +252,12 @@ def find_associated_records(ids, reflection, preload_options)
conditions << append_conditions(options, preload_options)

reflection.klass.find(:all,
:select => (options[:select] || "#{table_name}.*"),
:include => options[:include],
:select => (preload_options[:select] || options[:select] || "#{table_name}.*"),
:include => preload_options[:include] || options[:include],
:conditions => [conditions, ids],
:joins => options[:joins],
:group => options[:group],
:order => options[:order])
:group => preload_options[:group] || options[:group],
:order => preload_options[:order] || options[:order])
end


Expand Down
11 changes: 11 additions & 0 deletions activerecord/test/cases/associations/eager_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,17 @@ def test_eager_with_has_many_through_join_model_with_conditions
Author.find(:first, :order => 'authors.id').hello_post_comments.sort_by(&:id)
end

def test_eager_with_has_many_through_join_model_with_conditions_on_top_level
assert_equal comments(:more_greetings), Author.find(authors(:david).id, :include => :comments_with_order_and_conditions).comments_with_order_and_conditions.first
end

def test_eager_with_has_many_through_join_model_with_include
author_comments = Author.find(authors(:david).id, :include => :comments_with_include).comments_with_include.to_a
assert_no_queries do
author_comments.first.post.title
end
end

def test_eager_with_has_many_and_limit
posts = Post.find(:all, :order => 'posts.id asc', :include => [ :author, :comments ], :limit => 2)
assert_equal 2, posts.size
Expand Down
4 changes: 4 additions & 0 deletions activerecord/test/models/author.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ def testing_proxy_target
end
has_many :comments, :through => :posts
has_many :comments_containing_the_letter_e, :through => :posts, :source => :comments
has_many :comments_with_order_and_conditions, :through => :posts, :source => :comments, :order => 'comments.body', :conditions => "comments.body like 'Thank%'"
has_many :comments_with_include, :through => :posts, :source => :comments, :include => :post


has_many :comments_desc, :through => :posts, :source => :comments, :order => 'comments.id DESC'
has_many :limited_comments, :through => :posts, :source => :comments, :limit => 1
has_many :funky_comments, :through => :posts, :source => :comments
Expand Down

0 comments on commit 3f0dccb

Please sign in to comment.