mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Merge pull request #2236 from cldwalker/after_initialize
Fix after_initialize and Base.create edge case
This commit is contained in:
@@ -504,8 +504,7 @@ module ActiveRecord #:nodoc:
|
||||
if attributes.is_a?(Array)
|
||||
attributes.collect { |attr| create(attr, options, &block) }
|
||||
else
|
||||
object = new(attributes, options)
|
||||
yield(object) if block_given?
|
||||
object = new(attributes, options, &block)
|
||||
object.save
|
||||
object
|
||||
end
|
||||
|
||||
@@ -21,6 +21,7 @@ require 'models/parrot'
|
||||
require 'models/person'
|
||||
require 'models/edge'
|
||||
require 'models/joke'
|
||||
require 'models/bulb'
|
||||
require 'rexml/document'
|
||||
require 'active_support/core_ext/exception'
|
||||
|
||||
@@ -260,6 +261,18 @@ class BasicsTest < ActiveRecord::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_create_after_initialize_without_block
|
||||
cb = CustomBulb.create(:name => 'Dude')
|
||||
assert_equal('Dude', cb.name)
|
||||
assert_equal(true, cb.frickinawesome)
|
||||
end
|
||||
|
||||
def test_create_after_initialize_with_block
|
||||
cb = CustomBulb.create {|c| c.name = 'Dude' }
|
||||
assert_equal('Dude', cb.name)
|
||||
assert_equal(true, cb.frickinawesome)
|
||||
end
|
||||
|
||||
def test_load
|
||||
topics = Topic.find(:all, :order => 'id')
|
||||
assert_equal(4, topics.size)
|
||||
|
||||
@@ -33,4 +33,9 @@ class Bulb < ActiveRecord::Base
|
||||
end
|
||||
|
||||
class CustomBulb < Bulb
|
||||
after_initialize :set_awesomeness
|
||||
|
||||
def set_awesomeness
|
||||
self.frickinawesome = true if name == 'Dude'
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user