diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2018-05-27 09:28:27 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2018-05-27 09:28:27 +0900 |
commit | ced783fe74ea8683fbc09812ed0e0cadf449a358 (patch) | |
tree | 125398dfc6de4749ab8f53a2ba60430293c6af9a /activerecord/lib/active_record/associations/builder | |
parent | 6349ad300f2cace625b1c733410c4a39c91028ec (diff) | |
download | rails-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.rb | 3 |
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 |