Models should be equals even after destroyed

[#5978 state:committed]
This commit is contained in:
Santiago Pastorino 2010-11-16 12:36:47 -02:00
parent dff0dfb7f8
commit 4718d097ff
3 changed files with 13 additions and 4 deletions

View File

@ -1585,9 +1585,9 @@ MSG
# Returns true if the +comparison_object+ is the same object, or is of the same type and has the same id.
def ==(comparison_object)
comparison_object.equal?(self) ||
persisted? &&
(comparison_object.instance_of?(self.class) &&
comparison_object.id == id)
comparison_object.instance_of?(self.class) &&
id.present? &&
comparison_object.id == id
end
# Delegates to ==

View File

@ -397,6 +397,15 @@ class BasicsTest < ActiveRecord::TestCase
assert_not_equal Topic.new, Topic.new
end
def test_equality_of_destroyed_records
topic_1 = Topic.new(:title => 'test_1')
topic_1.save
topic_2 = Topic.find(topic_1.id)
topic_1.destroy
assert_equal topic_1, topic_2
assert_equal topic_2, topic_1
end
def test_hashing
assert_equal [ Topic.find(1) ], [ Topic.find(2).topic ] & [ Topic.find(1) ]
end

View File

@ -122,7 +122,7 @@ class NamedScopeTest < ActiveRecord::TestCase
:joins => 'JOIN authors ON authors.id = posts.author_id',
:conditions => [ 'authors.author_address_id = ?', address.id ]
)
assert_equal posts_with_authors_at_address_titles, Post.with_authors_at_address(address).find(:all, :select => 'title')
assert_equal posts_with_authors_at_address_titles.map(&:title), Post.with_authors_at_address(address).find(:all, :select => 'title').map(&:title)
end
def test_scope_with_object