<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>activerecord/test/fixtures/juliet.yml</filename>
    </added>
    <added>
      <filename>activerecord/test/fixtures/romeo.yml</filename>
    </added>
    <added>
      <filename>activerecord/test/models/circular_belonging.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -936,7 +936,9 @@ module ActiveRecord
             &quot;#{reflection.class_name}.send(:attr_readonly,\&quot;#{cache_column}\&quot;.intern) if defined?(#{reflection.class_name}) &amp;&amp; #{reflection.class_name}.respond_to?(:attr_readonly)&quot;
           )
         end
-
+        
+        add_single_associated_save_callbacks(reflection.name) 
+        
         configure_dependency_for_belongs_to(reflection)
       end
 </diff>
      <filename>activerecord/lib/active_record/associations.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,7 @@
 require &quot;cases/helper&quot;
 require 'models/developer'
 require 'models/project'
+require 'models/circular_belonging'
 require 'models/company'
 require 'models/topic'
 require 'models/reply'
@@ -383,6 +384,31 @@ class BelongsToAssociationsTest &lt; ActiveRecord::TestCase
     assert_raise(ActiveRecord::ReadOnlyRecord) { companies(:first_client).readonly_firm.save! }
     assert companies(:first_client).readonly_firm.readonly?
   end
+
+  def test_save_fails_for_invalid_belongs_to
+    assert log = AuditLog.create(:developer_id=&gt;0,:message=&gt;&quot;&quot;)
+    
+    log.developer = Developer.new
+    
+    assert !log.developer.valid?
+    assert !log.valid?
+    assert !log.save
+    assert_equal &quot;is invalid&quot;, log.errors.on(&quot;developer&quot;)
+  end
+  
+  # This is supposed to test against the problem described here:
+  # http://groups.google.com/group/rubyonrails-core/browse_thread/thread/652d0d7e6d455c08
+  # (which reverted this patch the first time)
+  # However, I cannot reproduce the problem. Perhaps changes in the core
+  # have made it go away?
+  def test_circular_save_for_belongs_to
+    assert romeo = Romeo.create(:montague=&gt;true)
+    romeo.juliet = Juliet.new
+    
+    assert !romeo.valid?
+    assert !romeo.save
+    assert_equal &quot;is invalid&quot;, romeo.errors.on(&quot;juliet&quot;)
+  end
   
   def test_polymorphic_assignment_foreign_type_field_updating
     # should update when assigning a saved record</diff>
      <filename>activerecord/test/cases/associations/belongs_to_associations_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -166,6 +166,10 @@ ActiveRecord::Schema.define do
   create_table :jobs, :force =&gt; true do |t|
     t.integer :ideal_reference_id
   end
+  
+  create_table :juliets, :force =&gt; true do |t|
+    t.integer :romeo_id
+  end
 
   create_table :keyboards, :force =&gt; true, :id  =&gt; false do |t|
     t.primary_key :key_number
@@ -321,6 +325,10 @@ ActiveRecord::Schema.define do
     t.integer :post_id, :null =&gt; false
     t.integer :person_id, :null =&gt; false
   end
+  
+  create_table :romeos, :force =&gt; true do |t|
+    t.integer :juliet_id
+  end
 
   create_table :shape_expressions, :force =&gt; true do |t|
     t.string  :paint_type</diff>
      <filename>activerecord/test/schema/schema.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ed0cb91a830f317e3a8192a90294c1005f6156c2</id>
    </parent>
  </parents>
  <author>
    <name>Ruy Asan</name>
    <email>ruyasan@gmail.com</email>
  </author>
  <url>http://github.com/rubyruy/rails/commit/f4cd52798b2cc1e4bf952b38712180e64cc91d51</url>
  <id>f4cd52798b2cc1e4bf952b38712180e64cc91d51</id>
  <committed-date>2008-06-05T14:30:27-07:00</committed-date>
  <authored-date>2008-06-05T14:30:27-07:00</authored-date>
  <message>Ensure that save on child object fails for invalid belongs_to
association. TAKE TWO! - now with more unit tests! (which pass anyway for some reason!)</message>
  <tree>1736c8d2f9ca6db027081b0ee7a39366830c20e3</tree>
  <committer>
    <name>Ruy Asan</name>
    <email>ruyasan@gmail.com</email>
  </committer>
</commit>
