From 6ba8caf3ee239fd7010b18ff251cb5c2d52b48c4 Mon Sep 17 00:00:00 2001 From: Kamal Fariz Mahyuddin Date: Wed, 9 Feb 2011 23:37:30 +0800 Subject: Fix observer callbacks firing multiple times on descendant instances --- activerecord/test/cases/lifecycle_test.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'activerecord/test/cases/lifecycle_test.rb') diff --git a/activerecord/test/cases/lifecycle_test.rb b/activerecord/test/cases/lifecycle_test.rb index 0558deb71b..a42f5d9c9d 100644 --- a/activerecord/test/cases/lifecycle_test.rb +++ b/activerecord/test/cases/lifecycle_test.rb @@ -7,6 +7,12 @@ require 'models/comment' class SpecialDeveloper < Developer; end +class DeveloperObserver < ActiveRecord::Observer + def before_save(developer) + developer.salary += 1 + end +end + class SalaryChecker < ActiveRecord::Observer observe :special_developer attr_accessor :last_saved @@ -196,4 +202,12 @@ class LifecycleTest < ActiveRecord::TestCase assert_equal developer, SalaryChecker.instance.last_saved end + test "callback observing the ancestor does not fire multiple times on descendent" do + DeveloperObserver.instance # activate + developer = Developer.create! :name => 'Ancestor', :salary => 100000 + assert_equal 100001, developer.salary, 'ancestor callback fired multiple times' + developer = SpecialDeveloper.create! :name => 'Descendent', :salary => 100000 + assert_equal 100001, developer.salary, 'descendent callback fired multiple times' + end + end -- cgit v1.2.3