diff options
author | Francesco Rodriguez <lrodriguezsanc@gmail.com> | 2012-10-03 18:02:14 -0500 |
---|---|---|
committer | Francesco Rodriguez <lrodriguezsanc@gmail.com> | 2012-10-03 18:02:14 -0500 |
commit | aa202adf6c78468c8e03efd11d84b71478de7b03 (patch) | |
tree | 8977d638cb7cc852c0b40b971ab07a66f64acb7b /activerecord/lib/active_record/associations/collection_association.rb | |
parent | e4e84fee8b9ecd63e1cc7b62beb577f8fe7ce35d (diff) | |
download | rails-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.rb | 2 |
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] |