aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord')
-rwxr-xr-xactiverecord/lib/active_record/base.rb13
-rwxr-xr-xactiverecord/test/cases/base_test.rb22
2 files changed, 26 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index c6dde078ca..ef5a7d5787 100755
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -1767,6 +1767,11 @@ module ActiveRecord #:nodoc:
@destroyed || false
end
+ # Returns if the record is persisted, i.e. it's not a new record and it was not destroyed.
+ def persisted?
+ !(new_record? || destroyed?)
+ end
+
# :call-seq:
# save(options)
#
@@ -1816,7 +1821,7 @@ module ActiveRecord #:nodoc:
# callbacks, Observer methods, or any <tt>:dependent</tt> association
# options, use <tt>#destroy</tt>.
def delete
- self.class.delete(id) unless new_record?
+ self.class.delete(id) if persisted?
@destroyed = true
freeze
end
@@ -1824,7 +1829,7 @@ module ActiveRecord #:nodoc:
# Deletes the record in the database and freezes this instance to reflect that no changes should
# be made (since they can't be persisted).
def destroy
- unless new_record?
+ if persisted?
self.class.unscoped.where(self.class.arel_table[self.class.primary_key].eq(id)).delete_all
end
@@ -1844,6 +1849,7 @@ module ActiveRecord #:nodoc:
became.instance_variable_set("@attributes", @attributes)
became.instance_variable_set("@attributes_cache", @attributes_cache)
became.instance_variable_set("@new_record", new_record?)
+ became.instance_variable_set("@destroyed", destroyed?)
became
end
@@ -2042,8 +2048,7 @@ module ActiveRecord #:nodoc:
def ==(comparison_object)
comparison_object.equal?(self) ||
(comparison_object.instance_of?(self.class) &&
- comparison_object.id == id &&
- !comparison_object.new_record?)
+ comparison_object.id == id && !comparison_object.new_record?)
end
# Delegates to ==
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index 1441b4278d..2c4e1a3c0f 100755
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -1330,11 +1330,6 @@ class BasicsTest < ActiveRecord::TestCase
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
@@ -1346,6 +1341,23 @@ class BasicsTest < ActiveRecord::TestCase
assert_equal developer.destroyed?, true
end
+ def test_persisted_returns_boolean
+ developer = Developer.new(:name => "Jose")
+ assert_equal developer.persisted?, false
+ developer.save!
+ assert_equal developer.persisted?, true
+
+ developer = Developer.first
+ assert_equal developer.persisted?, true
+ developer.destroy
+ assert_equal developer.persisted?, false
+
+ developer = Developer.last
+ assert_equal developer.persisted?, true
+ developer.delete
+ assert_equal developer.persisted?, false
+ end
+
def test_clone
topic = Topic.find(1)
cloned_topic = nil