aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrock Trappitt <brock.trappitt@gmail.com>2014-05-05 20:24:04 +0800
committerBrock Trappitt <brock.trappitt@gmail.com>2014-05-21 07:34:53 +0800
commit713fc39d93601043e027d5cd9ebcfa08064f9417 (patch)
treeea6e99031f03557f4d94a0b1361d79f0f739d8fe
parent5508a3e5ca05d4c43232868f40ebd726d251eeac (diff)
downloadrails-713fc39d93601043e027d5cd9ebcfa08064f9417.tar.gz
rails-713fc39d93601043e027d5cd9ebcfa08064f9417.tar.bz2
rails-713fc39d93601043e027d5cd9ebcfa08064f9417.zip
Prevented belongs_to: touch propagating up if there are no changes being saved
-rw-r--r--activerecord/CHANGELOG.md8
-rw-r--r--activerecord/lib/active_record/associations/builder/belongs_to.rb2
-rw-r--r--activerecord/test/cases/associations/belongs_to_associations_test.rb7
3 files changed, 16 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index 55a3cbfd60..447a000e15 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -1,3 +1,11 @@
+* Change belongs_to touch to be consistent with timestamp updates
+
+ If a model is set up with a belongs_to: touch relatinoship the parent
+ record will only be touched if the record was modified. This makes it
+ consistent with timestamp updating on the record itself.
+
+ *Brock Trappitt*
+
* Fixed the inferred table name of a HABTM auxiliar table inside a schema.
Fixes #14824
diff --git a/activerecord/lib/active_record/associations/builder/belongs_to.rb b/activerecord/lib/active_record/associations/builder/belongs_to.rb
index 47cc1f4b34..3998aca23e 100644
--- a/activerecord/lib/active_record/associations/builder/belongs_to.rb
+++ b/activerecord/lib/active_record/associations/builder/belongs_to.rb
@@ -103,7 +103,7 @@ module ActiveRecord::Associations::Builder
BelongsTo.touch_record(record, foreign_key, n, touch)
}
- model.after_save callback
+ model.after_save callback, if: :changed?
model.after_touch callback
model.after_destroy callback
end
diff --git a/activerecord/test/cases/associations/belongs_to_associations_test.rb b/activerecord/test/cases/associations/belongs_to_associations_test.rb
index 3b484a0d64..dc7314b450 100644
--- a/activerecord/test/cases/associations/belongs_to_associations_test.rb
+++ b/activerecord/test/cases/associations/belongs_to_associations_test.rb
@@ -369,6 +369,13 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
assert_queries(2) { line_item.update amount: 10 }
end
+ def test_belongs_to_with_touch_option_on_empty_update
+ line_item = LineItem.create!
+ Invoice.create!(line_items: [line_item])
+
+ assert_queries(0) { line_item.save }
+ end
+
def test_belongs_to_with_touch_option_on_destroy
line_item = LineItem.create!
Invoice.create!(line_items: [line_item])