diff options
| -rw-r--r-- | activerecord/lib/active_record/associations/collection_proxy.rb | 2 | ||||
| -rw-r--r-- | activerecord/test/cases/associations/has_many_associations_test.rb | 26 | 
2 files changed, 28 insertions, 0 deletions
| diff --git a/activerecord/lib/active_record/associations/collection_proxy.rb b/activerecord/lib/active_record/associations/collection_proxy.rb index 8cdb508c43..88b05bbcfa 100644 --- a/activerecord/lib/active_record/associations/collection_proxy.rb +++ b/activerecord/lib/active_record/associations/collection_proxy.rb @@ -1088,6 +1088,7 @@ module ActiveRecord        #   # => [#<Pet id: 1, name: "Snoop", group: "dogs", person_id: 1>]        def reload          proxy_association.reload +        @offsets = {}          reset_scope        end @@ -1110,6 +1111,7 @@ module ActiveRecord        def reset          proxy_association.reset          proxy_association.reset_scope +        @offsets = {}          reset_scope        end diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb index 590d3642bd..ae58dbff21 100644 --- a/activerecord/test/cases/associations/has_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_associations_test.rb @@ -741,6 +741,32 @@ class HasManyAssociationsTest < ActiveRecord::TestCase      assert_equal client2, firm.clients.merge!(where: ["#{QUOTED_TYPE} = :type", { type: "Client" }], order: "id").first    end +  def test_find_first_after_reset +    firm = Firm.all.merge!(order: "id").first + +    # Calling first twice should return the same object +    original_object_id = firm.clients.first.object_id +    assert_equal firm.clients.first.object_id, original_object_id, "Expected multiple invocations of #first to return the same object" + +    firm.clients.reset + +    # It should return a different object, since the association has been reloaded +    assert_not_equal original_object_id, firm.clients.first.object_id, "Expected #first after #reload to return a new object" +  end + +  def test_find_first_after_reload +    firm = Firm.all.merge!(order: "id").first + +    # Calling first twice should return the same object +    original_object_id = firm.clients.first.object_id +    assert_equal firm.clients.first.object_id, original_object_id, "Expected multiple invocations of #first to return the same object" + +    firm.clients.reload + +    # It should return a different object, since the association has been reloaded +    assert_not_equal original_object_id, firm.clients.first.object_id, "Expected #first after #reload to return a new object" +  end +    def test_find_all_with_include_and_conditions      assert_nothing_raised do        Developer.all.merge!(joins: :audit_logs, where: { "audit_logs.message" => nil, :name => "Smith" }).to_a | 
