Skip to content

WIP: duping leaks dirty tracking to original object - #690

Open
doits wants to merge 1 commit into
shioyama:masterfrom
doits:dirty_leak
Open

WIP: duping leaks dirty tracking to original object#690
doits wants to merge 1 commit into
shioyama:masterfrom
doits:dirty_leak

Conversation

@doits

@doits doits commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

hey @shioyama,

I think I just stumbled upon a bug in dirty tracking: duping an object and changing the dupe invalidates/leaks into the dirty tracking of the original object.

I added a failing spec here with what I think should be the right outcome. I'm not 100 % sure about the last assertion about the dupe (expect(dupe.previous_changes).to include({ "title_en" => ["foo", "bar"]})), but the rest seams clear to me.

To reproduce, simply create a record, .dup it and then change the dupe's localized attributes (see the failing spec).

I didn't investigate it yet (could work around it in my app), just want to give you a heads up. Don't know either if this is only a AR thing (were I added the spec) or some general problem with other ORMs, too.

Probably a cache object/hash does not get reset/duped on .dup and then both records share it.

Maybe you can take a look if you have some time? If not I could do so, too, when I find some time for it.

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant