Skip to content

Commit 30468f5

Browse files
committed
Fixed after_initialize callbacks call on AR model #dup
1 parent 686f94e commit 30468f5

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

activerecord/lib/active_record/core.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def initialize_dup(other)
210210

211211
@attributes = cloned_attributes
212212

213-
_run_after_initialize_callbacks if respond_to?(:_run_after_initialize_callbacks)
213+
_run_initialize_callbacks if _initialize_callbacks.any?
214214

215215
@changed_attributes = {}
216216
self.class.column_defaults.each do |attr, orig_value|

activerecord/test/cases/dup_test.rb

+8
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,13 @@ def test_dup_timestamps_are_cleared
9999
assert_not_nil new_topic.created_at
100100
end
101101

102+
def test_dup_after_initialize_callbacks
103+
topic = Topic.new
104+
assert Topic.after_initialize_called
105+
Topic.after_initialize_called = false
106+
topic.dup
107+
assert Topic.after_initialize_called
108+
end
109+
102110
end
103111
end

activerecord/test/models/topic.rb

+5
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ def topic_id
8080

8181
after_initialize :set_email_address
8282

83+
class_attribute :after_initialize_called
84+
after_initialize do
85+
self.class.after_initialize_called = true
86+
end
87+
8388
def approved=(val)
8489
@custom_approved = val
8590
write_attribute(:approved, val)

0 commit comments

Comments
 (0)