From 60b23ea1da1c119eaab6d07e5a03cf3b5d5577d4 Mon Sep 17 00:00:00 2001 From: Jon Leighton Date: Sat, 14 May 2011 19:40:24 +0100 Subject: CollectionAssociation#merge_target_lists should write to the underlying attributes when copying, rather than using the assignment method --- .../lib/active_record/associations/collection_association.rb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'activerecord/lib') diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb index d551cb01f0..50825a50f0 100644 --- a/activerecord/lib/active_record/associations/collection_association.rb +++ b/activerecord/lib/active_record/associations/collection_association.rb @@ -405,17 +405,14 @@ module ActiveRecord mem_record = memory.delete(record) if mem_record - # FIXME: this call to record.attributes causes many NoMethodErrors - attributes = record.attributes - # Only try to assign attributes which exist on mem_record - shared = mem_record.attribute_names & attributes.keys + shared = mem_record.attribute_names & record.attribute_names # Don't try to assign the primary key, or attributes which have changed on mem_record excluded = ["id"] + mem_record.changes.keys (shared - excluded).each do |key| - mem_record.send("#{key}=", attributes[key]) + mem_record[key] = record[key] end mem_record -- cgit v1.2.3