The Wire · Showcase
RAILS FIXES PLUCK REGRESSION, BOOTSNAP DITCHES MARSHAL FOR MSGPACK
By RepoJournal · Filed · About Rails
Rails patched a critical regression in association plucking for new records that broke `ids` queries overnight, while bootsnap replaced Date marshalling with faster, more compact msgpack serialization.
The pluck regression [1] hit after Rails delegated `Relation#ids` to `pluck`, causing associations on unsaved records to return empty arrays instead of reading their in-memory target. A post with tags assigned but not yet persisted would now report zero IDs. The fix reads the target directly for new records, restoring the pre-regression behavior. In parallel, Rails shipped two critical Active Job fixes: cursor serialization [2] now routes through `ActiveJob::Arguments` to preserve non-primitive types like Date and TimeWithZone across interrupt-resume cycles, and prepared statement handling [4] no longer forces preparation when the caller didn't request it, fixing transaction-pooling proxy incompatibilities. Bootsnap's msgpack overhaul [5] replaces Date marshalling with a three-integer packer that's more compact and faster without touching Marshal, part of a broader shift away from serialization that creates security surface. Rails also shipped internal predicate-builder hooks [3] for Active Record types to customize how attributes appear in hash predicates.
One email a day. Unsubscribe in one click.
Keep up with Rails in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Upgrade rails to pick up pluck regression fix if you use association.ids on new records rails/rails [immediate]
- → Review Active Job cursor serialization if you use continuation steps with Date/Time types rails/rails [plan]
- → Update bootsnap to leverage msgpack serialization improvements for startup time rails/bootsnap [monitor]
References
- [1] Pluck from the target when the owner is a new record rails/rails
- [2] Serialize continuation step cursors through Active Job arguments rails/rails
- [3] Add query predicate hooks for Active Record types ↗ rails/rails
- [4] Fixes #58371 rails/rails
- [5] Replace Date Marshalling with recursive msgpack ↗ rails/bootsnap