U kunt een routeringsbeperking aan meerdere routes tegelijk toevoegen via constraints() do ... end
.
Uiteindelijk heb ik dit gedaan en een algemene beperking ingesteld voor alle :id
params om het te matchen met een UUID-regexp:
MyApp::Application.routes.draw do
constraints(id: /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i) do
# my routes here
end
end
Op deze manier komen /posts/123 of /posts/foobar niet langer overeen met /posts/:id en 404 voordat de controlleractie ooit wordt aangeroepen, waardoor de PG-typefout wordt vermeden.
Al mijn modellen gebruiken UUID voor hun ID's, dus dit is schoon en DROOG. Als ik ook modellen met integer-ID's had, zou het iets minder schoon zijn.