Navigation Menu

Skip to content

Commit

Permalink
Fix has_many#count_records. [#865 state:resolved]
Browse files Browse the repository at this point in the history
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
  • Loading branch information
fxn authored and tarmo committed Aug 24, 2008
1 parent 2242d3f commit 0048f55
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
Expand Up @@ -27,8 +27,11 @@ def count_records
else
@reflection.klass.count(:conditions => @counter_sql, :include => @reflection.options[:include])
end

@target = [] and loaded if count == 0

# If there's nothing in the database and @target has no new records
# we are certain the current target is an empty array. This is a
# documented side-effect of the method that may avoid an extra SELECT.
@target ||= [] and loaded if count == 0

if @reflection.options[:limit]
count = [ @reflection.options[:limit], count ].min
Expand Down
12 changes: 12 additions & 0 deletions activerecord/test/cases/associations/has_many_associations_test.rb
Expand Up @@ -391,6 +391,18 @@ def test_collection_size_after_building
assert_equal 3, company.clients_of_firm.size
end

def test_collection_size_twice_for_regressions
post = posts(:thinking)
assert_equal 0, post.readers.size
# This test needs a post that has no readers, we assert it to ensure it holds,
# but need to reload the post because the very call to #size hides the bug.
post.reload
post.readers.build
size1 = post.readers.size
size2 = post.readers.size
assert_equal size1, size2
end

def test_build_many
company = companies(:first_firm)
new_clients = assert_no_queries { company.clients_of_firm.build([{"name" => "Another Client"}, {"name" => "Another Client II"}]) }
Expand Down

0 comments on commit 0048f55

Please sign in to comment.