aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/associations/association_collection.rb10
-rwxr-xr-xactiverecord/test/cases/associations_test.rb15
2 files changed, 17 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/associations/association_collection.rb b/activerecord/lib/active_record/associations/association_collection.rb
index 2d3750e107..2f03197012 100644
--- a/activerecord/lib/active_record/associations/association_collection.rb
+++ b/activerecord/lib/active_record/associations/association_collection.rb
@@ -166,12 +166,18 @@ module ActiveRecord
if attrs.is_a?(Array)
attrs.collect { |attr| create(attr) }
else
- create_record(attrs) { |record| record.save }
+ create_record(attrs) do |record|
+ yield(record) if block_given?
+ record.save
+ end
end
end
def create!(attrs = {})
- create_record(attrs) { |record| record.save! }
+ create_record(attrs) do |record|
+ yield(record) if block_given?
+ record.save!
+ end
end
# Returns the size of the collection by executing a SELECT COUNT(*) query if the collection hasn't been loaded and
diff --git a/activerecord/test/cases/associations_test.rb b/activerecord/test/cases/associations_test.rb
index 034fe14996..59349dd7cf 100755
--- a/activerecord/test/cases/associations_test.rb
+++ b/activerecord/test/cases/associations_test.rb
@@ -161,12 +161,15 @@ class AssociationProxyTest < ActiveRecord::TestCase
end
def test_create_via_association_with_block
- post1 = Post.create(:title => "setting body with a block") {|p| p.body = "will work"}
- assert_equal post1.body, "will work"
- assert_nothing_raised do
- post2 = authors(:david).posts.create(:title => "setting body with a block") {|p| p.body = "won't work"}
- end
- assert_equal post2.body, "won't work"
+ post = authors(:david).posts.create(:title => "New on Edge") {|p| p.body = "More cool stuff!"}
+ assert_equal post.title, "New on Edge"
+ assert_equal post.body, "More cool stuff!"
+ end
+
+ def test_create_with_bang_via_association_with_block
+ post = authors(:david).posts.create!(:title => "New on Edge") {|p| p.body = "More cool stuff!"}
+ assert_equal post.title, "New on Edge"
+ assert_equal post.body, "More cool stuff!"
end
def test_failed_reload_returns_nil