diff options
author | Klas Eskilson <klas.eskilson@gmail.com> | 2017-01-03 16:24:42 -0800 |
---|---|---|
committer | Klas Eskilson <klas.eskilson@gmail.com> | 2017-02-07 11:09:34 -0800 |
commit | 4a7b4f88cd3fc10ab56edc3f88d5db0c4f871dc9 (patch) | |
tree | 55393f0cecba8fb49b28585502d7bea653129963 /activerecord/test/cases | |
parent | 6599e07674d2389de45b91a11d3be5eb0fbd92f3 (diff) | |
download | rails-4a7b4f88cd3fc10ab56edc3f88d5db0c4f871dc9.tar.gz rails-4a7b4f88cd3fc10ab56edc3f88d5db0c4f871dc9.tar.bz2 rails-4a7b4f88cd3fc10ab56edc3f88d5db0c4f871dc9.zip |
Use `count(:all)` in HasManyAssociation#count_records
Problem: Calling `count` on an association can cause invalid SQL queries
to be created where the `SELECT COUNT(a, b, c)` function receives
multiple columns. This will cause a `StatementInvalid` exception later
on.
Solution: Use `count(:all)`, which generates a `SELECT COUNT(*)...`
query independently of the association.
This also includes a test case that, before the fix, broke.
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r-- | activerecord/test/cases/associations/has_many_associations_test.rb | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb index cbecfa84ff..df75776254 100644 --- a/activerecord/test/cases/associations/has_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_associations_test.rb @@ -2446,6 +2446,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 "double insertion of new object to association when same association used in the after create callback of a new object" do reset_callbacks(:save, Bulb) do Bulb.after_save { |record| record.car.bulbs.load } |