1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #27561 from fishbrain/count-all-in-has-many-association

Use `count(:all)` in HasManyAssociation#count_records
This commit is contained in:
Ryuta Kamizono 2018-01-03 05:44:11 +09:00
commit 401c42e3c3
4 changed files with 16 additions and 1 deletions

View file

@ -1,3 +1,8 @@
* Use `count(:all)` in `HasManyAssociation#count_records` to prevent invalid
SQL queries for association counting.
*Klas Eskilson*
* Fix to invoke callbacks when using `update_attribute`.
*Mike Busch*

View file

@ -63,7 +63,7 @@ module ActiveRecord
count = if reflection.has_cached_counter?
owner._read_attribute(reflection.counter_cache_column).to_i
else
scope.count
scope.count(:all)
end
# If there's nothing in the database and @target has no new records

View file

@ -2529,6 +2529,14 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
assert_equal [first_bulb, second_bulb], car.bulbs
end
test "association size calculation works with default scoped selects when not previously fetched" do
firm = Firm.create!(name: "Firm")
5.times { firm.developers_with_select << Developer.create!(name: "Developer") }
same_firm = Firm.find(firm.id)
assert_equal 5, same_firm.developers_with_select.size
end
test "prevent double insertion of new object when the parent association loaded in the after save callback" do
reset_callbacks(:save, Bulb) do
Bulb.after_save { |record| record.car.bulbs.load }

View file

@ -87,6 +87,8 @@ class Firm < Company
has_many :association_with_references, -> { references(:foo) }, class_name: "Client"
has_many :developers_with_select, -> { select("id, name, first_name") }, class_name: "Developer"
has_one :lead_developer, class_name: "Developer"
has_many :projects