7 changes: 7 additions & 0 deletions activerecord/lib/active_record/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2492,6 +2492,11 @@ def new_record?
@new_record || false
end

# Returns true if this object has been destroyed, otherwise returns false.
def destroyed?
@destroyed || false
end

# :call-seq:
# save(perform_validation = true)
#
Expand Down Expand Up @@ -2542,6 +2547,7 @@ def save!
# options, use <tt>#destroy</tt>.
def delete
self.class.delete(id) unless new_record?
@destroyed = true
freeze
end

Expand All @@ -2556,6 +2562,7 @@ def destroy
)
end

@destroyed = true
freeze
end

Expand Down
17 changes: 17 additions & 0 deletions activerecord/test/cases/base_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1271,6 +1271,23 @@ def test_new_record_returns_boolean
assert_equal Topic.find(1).new_record?, false
end

def test_destroyed_returns_boolean
developer = Developer.new
assert_equal developer.destroyed?, false
developer.destroy
assert_equal developer.destroyed?, true

developer = Developer.first
assert_equal developer.destroyed?, false
developer.destroy
assert_equal developer.destroyed?, true

developer = Developer.last
assert_equal developer.destroyed?, false
developer.delete
assert_equal developer.destroyed?, true
end

def test_clone
topic = Topic.find(1)
cloned_topic = nil
Expand Down