aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2014-02-25 14:57:06 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2014-02-25 14:57:49 -0800
commitb1656fa6305a5c8237027ab8165d7292751c0e86 (patch)
tree936a345805dfacbf2c701f0e4d4379d2819bc695 /activerecord/test
parent7c2ce0403badb73da517002f980bac30c540ade4 (diff)
downloadrails-b1656fa6305a5c8237027ab8165d7292751c0e86.tar.gz
rails-b1656fa6305a5c8237027ab8165d7292751c0e86.tar.bz2
rails-b1656fa6305a5c8237027ab8165d7292751c0e86.zip
let `insert_record` actuall save the object.
`before_add` callbacks are fired before the record is saved on `has_and_belongs_to_many` assocations *and* on `has_many :through` associations. Before this change, `before_add` callbacks would be fired before the record was saved on `has_and_belongs_to_many` associations, but *not* on `has_many :through` associations. Fixes #14144
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/associations/callbacks_test.rb21
1 files changed, 21 insertions, 0 deletions
diff --git a/activerecord/test/cases/associations/callbacks_test.rb b/activerecord/test/cases/associations/callbacks_test.rb
index 2d0d4541b4..e555c52281 100644
--- a/activerecord/test/cases/associations/callbacks_test.rb
+++ b/activerecord/test/cases/associations/callbacks_test.rb
@@ -101,6 +101,27 @@ class AssociationCallbacksTest < ActiveRecord::TestCase
"after_adding#{david.id}"], ar.developers_log
end
+ def test_has_and_belongs_to_many_before_add_called_before_save
+ dev = nil
+ new_dev = nil
+ klass = Class.new(Project) do
+ def self.name; Project.name; end
+ has_and_belongs_to_many :developers_with_callbacks,
+ :class_name => "Developer",
+ :before_add => lambda { |o,r|
+ dev = r
+ new_dev = r.new_record?
+ }
+ end
+ rec = klass.create!
+ alice = Developer.new(:name => 'alice')
+ rec.developers_with_callbacks << alice
+ assert_equal alice, dev
+ assert_not_nil new_dev
+ assert new_dev, "record should not have been saved"
+ assert_not alice.new_record?
+ end
+
def test_has_and_belongs_to_many_after_add_called_after_save
ar = projects(:active_record)
assert ar.developers_log.empty?