aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/builder
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2018-05-27 09:28:27 +0900
committerRyuta Kamizono <kamipo@gmail.com>2018-05-27 09:28:27 +0900
commitced783fe74ea8683fbc09812ed0e0cadf449a358 (patch)
tree125398dfc6de4749ab8f53a2ba60430293c6af9a /activerecord/lib/active_record/associations/builder
parent6349ad300f2cace625b1c733410c4a39c91028ec (diff)
downloadrails-ced783fe74ea8683fbc09812ed0e0cadf449a358.tar.gz
rails-ced783fe74ea8683fbc09812ed0e0cadf449a358.tar.bz2
rails-ced783fe74ea8683fbc09812ed0e0cadf449a358.zip
Fix inconsistent touching behavior between assigning and unassigning
On belongs_to with `touch: true` association, unassigned object is caused touching, but assigned object is not touched. And also, if primary key is customized, it will touch against the wrong target looked up by the customized key as primary key. This change ensures correctly touching consistently between assigning and unassigning.
Diffstat (limited to 'activerecord/lib/active_record/associations/builder')
-rw-r--r--activerecord/lib/active_record/associations/builder/belongs_to.rb3
1 files changed, 2 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/builder/belongs_to.rb b/activerecord/lib/active_record/associations/builder/belongs_to.rb
index 9e012285e5..4b6cb76081 100644
--- a/activerecord/lib/active_record/associations/builder/belongs_to.rb
+++ b/activerecord/lib/active_record/associations/builder/belongs_to.rb
@@ -92,7 +92,8 @@ module ActiveRecord::Associations::Builder # :nodoc:
else
klass = association.klass
end
- old_record = klass.find_by(klass.primary_key => old_foreign_id)
+ primary_key = reflection.association_primary_key(klass)
+ old_record = klass.find_by(primary_key => old_foreign_id)
if old_record
if touch != true