diff options
-rw-r--r-- | activerecord/CHANGELOG | 2 | ||||
-rwxr-xr-x | activerecord/lib/active_record/associations.rb | 8 | ||||
-rwxr-xr-x | activerecord/test/associations_test.rb | 23 |
3 files changed, 20 insertions, 13 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 21decee967..beb419b62c 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,7 +1,5 @@ *SVN* -* Saving a record with two unsaved belongs_to associations pointing to the same object fails #2023 [Tobias Luetke] - * Make destroy return self #1913 [sebastian.kanthak@muehlheim.de] * Fix typo in validations documentation #1938 [court3nay] diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index d0db4469e2..ffb0d5679b 100755 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -445,12 +445,10 @@ module ActiveRecord module_eval do before_save <<-EOF association = instance_variable_get("@#{association_name}") - if not association.nil? - if association.new_record? - association.save(true) - association.send(:construct_sql) - end + if not association.nil? and association.new_record? + association.save(true) self["#{association_class_primary_key_name}"] = association.id + association.send(:construct_sql) end EOF end diff --git a/activerecord/test/associations_test.rb b/activerecord/test/associations_test.rb index e20477f3e2..c8dc687106 100755 --- a/activerecord/test/associations_test.rb +++ b/activerecord/test/associations_test.rb @@ -7,6 +7,8 @@ require 'fixtures/reply' require 'fixtures/computer' require 'fixtures/customer' require 'fixtures/order' +require 'fixtures/post' +require 'fixtures/author' # Can't declare new classes in test case methods, so tests before that bad_collection_keys = false @@ -813,12 +815,21 @@ class BelongsToAssociationsTest < Test::Unit::TestCase end def test_association_assignment_sticks - client = Client.find(:first) - apple = Firm.create("name" => "Apple") - client.firm = apple - client.save! - client.reload - assert_equal apple.id, client.firm_id + post = Post.find(:first) + author1, author2 = Author.find(:all, :limit => 2) + + # make sure the association is loaded + post.author + + # set the association by id, directly + post.author_id = author2.id + + # save and reload + post.save! + post.reload + + # the author id of the post should be the id we set + assert_equal post.author_id, author2.id end end |