diff options
author | Lauro Caetano <laurocaetano1@gmail.com> | 2014-04-14 21:24:31 -0300 |
---|---|---|
committer | Lauro Caetano <laurocaetano1@gmail.com> | 2014-04-14 22:00:21 -0300 |
commit | 34945e41c24c59268bbde63abfafe20bdc09b775 (patch) | |
tree | 95ec397101f7a23e25f03d44af817795e3c73dad | |
parent | 43f525031ad3f83a04f84e79bbe1de340bf937aa (diff) | |
download | rails-34945e41c24c59268bbde63abfafe20bdc09b775.tar.gz rails-34945e41c24c59268bbde63abfafe20bdc09b775.tar.bz2 rails-34945e41c24c59268bbde63abfafe20bdc09b775.zip |
The Association Relation should use `empty?` and `size` from Relation.
968c581ea34b5236af14805e6a77913b1cb36238 have introduced this bug #14744
on Association Relation when the method `empty?` or `size` was called.
Example:
# Given an author that does have 3 posts, but none of them with the
# title 'Some Title'
Author.last.posts.where(title: 'Some Title').size
# => 3
It was occurring, because the Association Relation had implemented these
methods based on `@association`, this way giving wrong results.
To fix it, was necessary to remove the methods `empty?` and `size` from
Association Relation. It just have to use these methods from Relation.
Example:
# Given an author that does have 3 posts, but none of them with the
# title 'Some Title'
Author.last.posts.where(title: 'Some Title').size
# => 0
# Now it will return the correct value.
Fixes #14744.
-rw-r--r-- | activerecord/lib/active_record/association_relation.rb | 8 | ||||
-rw-r--r-- | activerecord/test/cases/relations_test.rb | 11 |
2 files changed, 11 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/association_relation.rb b/activerecord/lib/active_record/association_relation.rb index 45f1b07f69..5a84792f45 100644 --- a/activerecord/lib/active_record/association_relation.rb +++ b/activerecord/lib/active_record/association_relation.rb @@ -9,14 +9,6 @@ module ActiveRecord @association end - def size - @association.size - end - - def empty? - @association.empty? - end - def ==(other) other == to_a end diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 562cfe6796..ddfcaaf986 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -864,6 +864,17 @@ class RelationTest < ActiveRecord::TestCase assert_equal 9, posts.where(:comments_count => 0).count end + def test_count_on_association_relation + author = Author.last + another_author = Author.first + posts = Post.where(author_id: author.id) + + assert_equal author.posts.where(author_id: author.id).size, posts.count + + assert_equal 0, author.posts.where(author_id: another_author.id).size + assert author.posts.where(author_id: another_author.id).empty? + end + def test_count_with_distinct posts = Post.all |