This Week in Rails behebt Regressionen in Active Record, URL-Helfern und lokalem Cache
Der Wochenüberblick This Week in Rails vom 6. November, geschrieben von Greg, erinnert zunächst daran, dass Rails 8.0.5.2 und 8.1.4.1 Sicherheitsreleases mit 21 behobenen Problemen sind. Der Großteil der übrigen Änderungen der Woche korrigiert Regressionen, die durch jüngste Umbauten im Hauptzweig entstanden waren.
In Active Record akzeptieren where! und having! wieder Bind-Werte; sie sind als nodoc markiert, aber laut Beitrag rufen Anwendungen und Gems wie Discourse und Canvas sie auf, und ein Umbau hatte where!("id = ?", 1) einen NoMethodError werfen lassen. one? und many? zählen jetzt :all statt der Select-Liste, die bei mehreren Select-Werten ungültige COUNT-Anweisungen erzeugt hatte, und bei gruppierten Relationen zählen sie die Gruppen, statt false zu liefern oder einen TypeError zu werfen. Das Mergen einer mit with_recursive gebauten Relation verliert RECURSIVE nicht mehr, in_order_of verändert nicht mehr die aufrufende Relation, und includes weiß wieder, dass eine über ein gemergtes order referenzierte Tabelle gejoint werden muss.
URL-Helfer erzeugen wieder eine URL, wenn to_param eines Datensatzes leer ist und Standard-URL-Optionen gesetzt sind, statt UrlGenerationError zu werfen, was vor allem Mailer betraf. Hash#to_query und Array#to_query überspringen verschachtelte Werte, die zu nichts serialisieren, ein Suchlink wird also nicht mehr zu /search?&page=2. Beim Caching funktionieren anonyme Unterklassen von Cache-Stores wieder mit LocalCache, delete_multi hält den lokalen Cache konsistent, und Lesezugriffe direkt nach MemCacheStore#write_multi liefern keine veralteten Werte mehr. Enumerable#index_with iteriert wieder mit each, nachdem eine Änderung zur Vorab-Dimensionierung es für Hashes und Structs gebrochen hatte.

Was das bedeutet
Eine Woche voller solcher Korrekturen ist genau der Zweck eines Entwicklungszweigs: Die Regressionen wurden vor einem Release gefunden. Betroffen gewesen wären Anwendungen, die Rails main folgen oder nodoc-Methoden wie where! nutzen.