aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2018-05-02 06:35:25 +0900
committerRyuta Kamizono <kamipo@gmail.com>2018-05-25 23:57:09 +0900
commit6edf354b656ec556c3573402019504a519531953 (patch)
treed6d772aa578bd9594fc1e78fe610dcff86fb0a8b /activerecord/test
parent8a600183550298a1f350a8fa8d72630da607fb60 (diff)
downloadrails-6edf354b656ec556c3573402019504a519531953.tar.gz
rails-6edf354b656ec556c3573402019504a519531953.tar.bz2
rails-6edf354b656ec556c3573402019504a519531953.zip
Eager loading won't mutate owner record
Since #31575, `BelongsToAssociation#target=` replaces owner record's foreign key to fix an inverse association bug. But the method is not only used for inverse association but also used for eager loading/preloading, it caused some public behavior changes (#32338, #32375). To avoid any side-effect in loading associations, I reverted the overriding `#target=`, then introduced `#inversed_from` to replace foreign key in `set_inverse_instance`. Closes #32375.
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/associations/belongs_to_associations_test.rb8
1 files changed, 8 insertions, 0 deletions
diff --git a/activerecord/test/cases/associations/belongs_to_associations_test.rb b/activerecord/test/cases/associations/belongs_to_associations_test.rb
index 5011a9bbde..b3f5de4c5f 100644
--- a/activerecord/test/cases/associations/belongs_to_associations_test.rb
+++ b/activerecord/test/cases/associations/belongs_to_associations_test.rb
@@ -44,6 +44,14 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
assert_raise(frozen_error_class) { client.firm = Firm.new(name: "Firm") }
end
+ def test_eager_loading_wont_mutate_owner_record
+ client = Client.eager_load(:firm_with_basic_id).first
+ assert_not_predicate client, :firm_id_came_from_user?
+
+ client = Client.preload(:firm_with_basic_id).first
+ assert_not_predicate client, :firm_id_came_from_user?
+ end
+
def test_missing_attribute_error_is_raised_when_no_foreign_key_attribute
assert_raises(ActiveModel::MissingAttributeError) { Client.select(:id).first.firm }
end