diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-05-16 17:32:00 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-05-16 17:32:00 -0700 |
commit | 08212956a74de5e424077c4b5cf8ea5744fad46e (patch) | |
tree | 6eb2296e4825fc583cfc8592d888b88624ffc8eb /activerecord/lib/active_record/associations/collection_association.rb | |
parent | fc3b3b92a68c634a69ae4987a70f272c9f3f774e (diff) | |
parent | f31670d0270342f37846082ac1a27fc6d3400a8a (diff) | |
download | rails-08212956a74de5e424077c4b5cf8ea5744fad46e.tar.gz rails-08212956a74de5e424077c4b5cf8ea5744fad46e.tar.bz2 rails-08212956a74de5e424077c4b5cf8ea5744fad46e.zip |
Merge pull request #5453 from JonRowe/patch_uniq_has_and_belongs_to_many_when_already_loaded
When Active Record has already loaded a unique association `.size` returns the wrong number.
Diffstat (limited to 'activerecord/lib/active_record/associations/collection_association.rb')
-rw-r--r-- | activerecord/lib/active_record/associations/collection_association.rb | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb index 56ec4c5c23..3af5ff3eab 100644 --- a/activerecord/lib/active_record/associations/collection_association.rb +++ b/activerecord/lib/active_record/associations/collection_association.rb @@ -242,8 +242,12 @@ module ActiveRecord # This method is abstract in the sense that it relies on # +count_records+, which is a method descendants have to provide. def size - if !find_target? || (loaded? && !options[:uniq]) - target.size + if !find_target? || loaded? + if options[:uniq] + target.uniq.size + else + target.size + end elsif !loaded? && options[:group] load_target.size elsif !loaded? && !options[:uniq] && target.is_a?(Array) |