mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Copy changed_attributes across to newly become'd records
Without this, the original record's values won't get saved, since the partial insertions support (144e8691cb
) checks for changed values and thinks there are none.
This commit is contained in:
parent
df09ce966e
commit
b7bf025374
2 changed files with 15 additions and 0 deletions
|
@ -181,6 +181,7 @@ module ActiveRecord
|
|||
became = klass.new
|
||||
became.instance_variable_set("@attributes", @attributes)
|
||||
became.instance_variable_set("@attributes_cache", @attributes_cache)
|
||||
became.instance_variable_set("@changed_attributes", @changed_attributes)
|
||||
became.instance_variable_set("@new_record", new_record?)
|
||||
became.instance_variable_set("@destroyed", destroyed?)
|
||||
became.instance_variable_set("@errors", errors)
|
||||
|
|
|
@ -152,6 +152,20 @@ class PersistenceTest < ActiveRecord::TestCase
|
|||
assert_equal original_errors, client.errors
|
||||
end
|
||||
|
||||
def test_dupd_becomes_persists_changes_from_the_original
|
||||
original = topics(:first)
|
||||
copy = original.dup.becomes(Reply)
|
||||
copy.save!
|
||||
assert_equal "The First Topic", Topic.find(copy.id).title
|
||||
end
|
||||
|
||||
def test_becomes_includes_changed_attributes
|
||||
company = Company.new(name: "37signals")
|
||||
client = company.becomes(Client)
|
||||
assert_equal "37signals", client.name
|
||||
assert_equal %w{name}, client.changed
|
||||
end
|
||||
|
||||
def test_delete_many
|
||||
original_count = Topic.count
|
||||
Topic.delete(deleting = [1, 2])
|
||||
|
|
Loading…
Reference in a new issue