Du kan tilføje en routing-begrænsning til flere ruter ad gangen via constraints() do ... end
.
Jeg endte med at gøre dette og sætte en global begrænsning på alle :id
params for at matche det med et 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
På denne måde matcher /posts/123 eller /posts/foobar ikke længere /posts/:id og 404, før de nogensinde påkalder controllerhandlingen, og dermed undgås PG-typefejlen.
Alle mine modeller vil bruge UUID til deres ID'er, så dette er rent og TØRT. Hvis jeg også havde nogle modeller med heltals-id'er, ville det være lidt mindre rent.