mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #6978 from frodsan/count_nosql_unsaved_parent
Count returns 0 without querying if parent is not saved
This commit is contained in:
commit
3a63fe3093
5 changed files with 37 additions and 0 deletions
|
@ -1,5 +1,22 @@
|
|||
## Rails 4.0.0 (unreleased) ##
|
||||
|
||||
* `CollectionAssociation#count` returns 0 without querying if the
|
||||
parent record is new.
|
||||
|
||||
Before:
|
||||
|
||||
person.pets
|
||||
# SELECT COUNT(*) FROM "pets" WHERE "pets"."person_id" IS NULL
|
||||
# => 0
|
||||
|
||||
After:
|
||||
|
||||
person.pets
|
||||
# fires without sql query
|
||||
# => 0
|
||||
|
||||
*Francesco Rodriguez*
|
||||
|
||||
* Fix `reset_counters` crashing on `has_many :through` associations.
|
||||
Fix #7822.
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -799,6 +799,12 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
|
|||
assert_equal 1, developer.projects.count
|
||||
end
|
||||
|
||||
def test_counting_should_not_fire_sql_if_parent_is_unsaved
|
||||
assert_no_queries do
|
||||
assert_equal 0, Developer.new.projects.count
|
||||
end
|
||||
end
|
||||
|
||||
unless current_adapter?(:PostgreSQLAdapter)
|
||||
def test_count_with_finder_sql
|
||||
assert_equal 3, projects(:active_record).developers_with_finder_sql.count
|
||||
|
|
|
@ -262,6 +262,12 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
|
|||
assert_equal firm.limited_clients.length, firm.limited_clients.count
|
||||
end
|
||||
|
||||
def test_counting_should_not_fire_sql_if_parent_is_unsaved
|
||||
assert_no_queries do
|
||||
assert_equal 0, Person.new.readers.count
|
||||
end
|
||||
end
|
||||
|
||||
def test_finding
|
||||
assert_equal 2, Firm.all.merge!(:order => "id").first.clients.length
|
||||
end
|
||||
|
|
|
@ -767,6 +767,12 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase
|
|||
assert_equal 1, authors(:mary).categories.general.count
|
||||
end
|
||||
|
||||
def test_counting_should_not_fire_sql_if_parent_is_unsaved
|
||||
assert_no_queries do
|
||||
assert_equal 0, Person.new.posts.count
|
||||
end
|
||||
end
|
||||
|
||||
def test_has_many_through_belongs_to_should_update_when_the_through_foreign_key_changes
|
||||
post = posts(:eager_other)
|
||||
|
||||
|
|
Loading…
Reference in a new issue