mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Dirty: treat two changes resulting in the original value as being unchanged.
[#798 state:resolved] Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
parent
f277e1d8fd
commit
ad562c58ea
2 changed files with 40 additions and 1 deletions
|
@ -123,7 +123,10 @@ module ActiveRecord
|
|||
attr = attr.to_s
|
||||
|
||||
# The attribute already has an unsaved change.
|
||||
unless changed_attributes.include?(attr)
|
||||
if changed_attributes.include?(attr)
|
||||
old = changed_attributes[attr]
|
||||
changed_attributes.delete(attr) unless field_changed?(attr, old, value)
|
||||
else
|
||||
old = clone_attribute_value(:read_attribute, attr)
|
||||
changed_attributes[attr] = old if field_changed?(attr, old, value)
|
||||
end
|
||||
|
|
|
@ -191,6 +191,42 @@ class DirtyTest < ActiveRecord::TestCase
|
|||
assert !pirate.changed?
|
||||
end
|
||||
|
||||
def test_reverted_changes_are_not_dirty
|
||||
phrase = "shiver me timbers"
|
||||
pirate = Pirate.create!(:catchphrase => phrase)
|
||||
pirate.catchphrase = "*hic*"
|
||||
assert pirate.changed?
|
||||
pirate.catchphrase = phrase
|
||||
assert !pirate.changed?
|
||||
end
|
||||
|
||||
def test_reverted_changes_are_not_dirty_after_multiple_changes
|
||||
phrase = "shiver me timbers"
|
||||
pirate = Pirate.create!(:catchphrase => phrase)
|
||||
10.times do |i|
|
||||
pirate.catchphrase = "*hic*" * i
|
||||
assert pirate.changed?
|
||||
end
|
||||
assert pirate.changed?
|
||||
pirate.catchphrase = phrase
|
||||
assert !pirate.changed?
|
||||
end
|
||||
|
||||
|
||||
def test_reverted_changes_are_not_dirty_going_from_nil_to_value_and_back
|
||||
pirate = Pirate.create!(:catchphrase => "Yar!")
|
||||
|
||||
pirate.parrot_id = 1
|
||||
assert pirate.changed?
|
||||
assert pirate.parrot_id_changed?
|
||||
assert !pirate.catchphrase_changed?
|
||||
|
||||
pirate.parrot_id = nil
|
||||
assert !pirate.changed?
|
||||
assert !pirate.parrot_id_changed?
|
||||
assert !pirate.catchphrase_changed?
|
||||
end
|
||||
|
||||
def test_save_should_store_serialized_attributes_even_with_partial_updates
|
||||
with_partial_updates(Topic) do
|
||||
topic = Topic.create!(:content => {:a => "a"})
|
||||
|
|
Loading…
Reference in a new issue