RepoJournal

$ cat rails/month/2026-10-01.log

Rails

Rails

the month in review · October 2026

Rails drops dynamic controller routes, MySQL 5.6, and Trilogy patches

By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology

♥

The five-year deprecation for dynamic controller and action routes now raises ArgumentError, and Trilogy 2.13.2 closes an escape SQL injection.

762 commits 387 PRs merged 3 releases 31 briefings covered

all rails reviews →

v4.7.0 rails/tailwindcss-rails

by flavorjones

The install and upgrade tasks now work when the gem sits under a path with spaces. If your gems live in a directory with a space in it, those generators had been the failure point.

Remove support for dynamic controller/action in routes rails/rails

by tenderlove

Any route matching :controller(/:action(/:id)) now raises ArgumentError instead of resolving at request time. It has been deprecated since Rails 5.0, so grep your route files for dynamic segments before the next deploy.

Escape JSON with String#tr! rails/rails

by federico-carrocera

The JSON escaper now uses String#tr!, which takes a Hash as of a matching Ruby change, escaping in one pass with no Regexp. It is guarded on valid_encoding? and falls back to gsub!, so the speedup touches every JSON response Rails encodes.

Include extra node state in Arel equality rails/rails

by Akash Saini

Matches, Regexp, InfixOperation and UnaryOperation inherited eql? and hash from Binary and Unary, which compare class and operands only. Extra state like escape and case_sensitive was invisible to equality, which matters anywhere nodes are cached or deduplicated.

Cache ActiveSupport::ParameterFilter instances across requests rails/rails

by Benoit Daloze

The ParameterFilter was memoized on the request object, so every request paid compile_filters! over all configured filters. Caching the instance across requests removes that work from the path of every filtered request.

Roll back when a before_commit callback raises a rollback error rails/rails

by adam-h

within_new_transaction rescued TransactionRollbackError around commit_transaction and skipped the ROLLBACK, assuming a failed COMMIT had already ended the transaction. That rescue also covered before_commit_records, so a raise there left the transaction open.

Add maintenance_database option to the PostgreSQL adapter rails/rails

by Yasuo Honda

db:create, db:drop and db:purge connect to postgres by default, which managed services like DigitalOcean do not provide (they offer defaultdb only). The new maintenance_database option lets the adapter point those tasks elsewhere.

Remove dead code for Ruby < 3.3.1 rails/rails

by Hartley McGuire

Rails bumped its minimum to Ruby 3.3.1 in March, and the compatibility shims for older Rubies have now been deleted. Dropping 3.3.1-compatible dead code is routine cleanup, not a signal to change your Ruby version.

$ ls rails/month/ # the briefings behind this review

Thu Oct 1 Dynamic controller/action routes removed, JSON escaping rewritten Fri Oct 2 Arel equality gets subclass state, bootsnap preserves source encoding Sat Oct 3 Parameter filters get cached, transactions roll back on before_commit errors Sun Oct 4 Rails documents what reload actually resets, docs server pins Ruby 3.3.5 Mon Oct 5 Configurable maintenance database for Postgres, plus retention sizing guidance for solid_cable Tue Oct 6 Old migrations get their first real test coverage Wed Oct 7 to_markdown fixes broken code spans, Ractor schema cache simplified Thu Oct 8 Rails docs sweep fixes a purge/destroy mixup before it misleads Fri Oct 9 Query constraints move into SchemaContext as Rails trims Ractor subscriptions Sat Oct 10 Bulk ALTER TABLE for constraints, Ractor-safe importmaps Sun Oct 11 Rails docs move from RDoc to Markdown across Action Pack and Action Mailer Mon Oct 12 Action View falls back to Prism on Ruby master Tue Oct 13 Composite foreign keys and abstract-class constraints get fixed across Rails and GlobalID Wed Oct 14 Ractor-safe Active Job serialization, pluggable agents in lemans benchmarks Thu Oct 15 Static routes short-circuit, Active Job handlers work in non-main Ractors Fri Oct 16 Active Record attribute reads get faster, with Ractor safety restored Sat Oct 17 Association keys resolved once per class pair, Ractor proxy moves state to the main Ractor Sun Oct 18 Rails confines the collection buffer to ERB, fixing empty partials Mon Oct 19 MySQL 5.6 falls off the support floor as Arel stops rebuilding literals Tue Oct 20 Inlined attribute writers, leaner ActiveRecord::Key Wed Oct 21 in_order_of double-serializes values, id_value alias restored Thu Oct 22 Attribute-read regression fixed, decimal numericality corrected Fri Oct 23 CSP validation stops allocating, request header getters go bootsnap-cacheable Sat Oct 24 Deprecation proxies get a BasicObject base, URL generation allocates less Sun Oct 25 Rails API docs switch to Markdown by default Mon Oct 26 immutable_strings_by_default stops eating column types; URL helpers stay optimized Tue Oct 27 MySQL optimizer hints stay put, tailwindcss-rails 4.7.0 fixes spaced paths Wed Oct 28 Action Cable orders a connection's commands, log filtering matches decoded param names Thu Oct 29 Faster unnamed url_for, ColumnDefinition accessors deprecated Fri Oct 30 Default ordering stops leaking into aggregates and exists? Sat Oct 31 Trilogy 2.13.2 closes an escape SQL injection, and Rails moves off cp932

Keep up with Rails in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.

or

fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.

Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.

all rails reviews →