$ cat rails/month/2026-10-01.log
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.
v4.7.0 rails/tailwindcss-rails
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
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
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
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
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
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
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
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
Keep up with Rails in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
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.