aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/collection_association.rb
diff options
context:
space:
mode:
authorFrancesco Rodriguez <lrodriguezsanc@gmail.com>2012-10-03 18:02:14 -0500
committerFrancesco Rodriguez <lrodriguezsanc@gmail.com>2012-10-03 18:02:14 -0500
commitaa202adf6c78468c8e03efd11d84b71478de7b03 (patch)
tree8977d638cb7cc852c0b40b971ab07a66f64acb7b /activerecord/lib/active_record/associations/collection_association.rb
parente4e84fee8b9ecd63e1cc7b62beb577f8fe7ce35d (diff)
downloadrails-aa202adf6c78468c8e03efd11d84b71478de7b03.tar.gz
rails-aa202adf6c78468c8e03efd11d84b71478de7b03.tar.bz2
rails-aa202adf6c78468c8e03efd11d84b71478de7b03.zip
Count returns 0 without querying if parent is not saved
Patches `CollectionAssociation#count` to return 0 without querying if the parent record is new. Consider the following code: class Account has_many :dossiers end class Dossier belongs_to :account end a = Account.new a.dossiers.build # before patch a.dossiers.count # SELECT COUNT(*) FROM "dossiers" WHERE "dossiers"."account_id" IS NULL # => 0 # after a.dosiers.count # fires without sql query # => 0 Fixes #1856.
Diffstat (limited to 'activerecord/lib/active_record/associations/collection_association.rb')
-rw-r--r--activerecord/lib/active_record/associations/collection_association.rb2
1 files changed, 2 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb
index fe3e5b00f7..96270ec0e9 100644
--- a/activerecord/lib/active_record/associations/collection_association.rb
+++ b/activerecord/lib/active_record/associations/collection_association.rb
@@ -174,6 +174,8 @@ module ActiveRecord
# association, it will be used for the query. Otherwise, construct options and pass them with
# scope to the target class's +count+.
def count(column_name = nil, count_options = {})
+ return 0 if owner.new_record?
+
column_name, count_options = nil, column_name if column_name.is_a?(Hash)
if options[:counter_sql] || options[:finder_sql]