diff options
| -rw-r--r-- | activerecord/test/cases/associations/has_many_associations_test.rb | 9 | ||||
| -rw-r--r-- | activerecord/test/models/contract.rb | 15 | 
2 files changed, 24 insertions, 0 deletions
diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb index 43974fd895..a493ea9974 100644 --- a/activerecord/test/cases/associations/has_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_associations_test.rb @@ -2,6 +2,7 @@ require "cases/helper"  require 'models/developer'  require 'models/project'  require 'models/company' +require 'models/contract'  require 'models/topic'  require 'models/reply'  require 'models/category' @@ -1475,4 +1476,12 @@ class HasManyAssociationsTest < ActiveRecord::TestCase      tagging = Tagging.create! :taggable => post      assert_equal [tagging], post.taggings    end + +  def test_dont_call_save_callbacks_twice_on_has_many +    firm = companies(:first_firm) +    contract = firm.contracts.create! + +    assert_equal 1, contract.hi_count +    assert_equal 1, contract.bye_count +  end  end diff --git a/activerecord/test/models/contract.rb b/activerecord/test/models/contract.rb index 94fd48e12a..2cf5aa7a85 100644 --- a/activerecord/test/models/contract.rb +++ b/activerecord/test/models/contract.rb @@ -1,4 +1,19 @@  class Contract < ActiveRecord::Base    belongs_to :company    belongs_to :developer + +  before_save :hi +  after_save :bye + +  attr_accessor :hi_count, :bye_count + +  def hi +    @hi_count ||= 0 +    @hi_count += 1 +  end + +  def bye +    @bye_count ||= 0 +    @bye_count += 1 +  end  end  | 
