Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added a differenciation between AssociationCollection#size and -lengt…

…h. Now AssociationCollection#size returns the size of the collection by executing a SELECT COUNT(*) query if the collection hasn't been loaded and calling collection.size if it has. If it's more likely than not that the collection does have a size larger than zero and you need to fetch that collection afterwards, it'll take one less SELECT query if you use length.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@392 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit fe8fb574c06156ca7eef7367c85bd12991948806 1 parent 45ea2bd
@dhh dhh authored
View
5 activerecord/CHANGELOG
@@ -1,5 +1,10 @@
*SVN*
+* Added a differenciation between AssociationCollection#size and -length. Now AssociationCollection#size returns the size of the
+ collection by executing a SELECT COUNT(*) query if the collection hasn't been loaded and calling collection.size if it has. If
+ it's more likely than not that the collection does have a size larger than zero and you need to fetch that collection afterwards,
+ it'll take one less SELECT query if you use length.
+
* Added Base#attributes that returns a hash of all the attributes with their names as keys and clones of their objects as values #433 [atyp.de]
* Fixed that foreign keys named the same as the association would cause stack overflow #437 [Eric Anderson]
View
11 activerecord/lib/active_record/associations/association_collection.rb
@@ -70,12 +70,21 @@ def destroy_all
@collection = []
end
+ # Returns the size of the collection by executing a SELECT COUNT(*) query if the collection hasn't been loaded and
+ # calling collection.size if it has. If it's more likely than not that the collection does have a size larger than zero
+ # and you need to fetch that collection afterwards, it'll take one less SELECT query if you use length.
def size
if loaded? then @collection.size else count_records end
end
+ # Returns the size of the collection by loading it and calling size on the array. If you want to use this method to check
+ # whether the collection is empty, use collection.length.zero? instead of collection.empty?
+ def length
+ load_collection.size
+ end
+
def empty?
- size == 0
+ size.zero?
end
def uniq(collection = self)
Please sign in to comment.
Something went wrong with that request. Please try again.