Du kan lägga till en ruttbegränsning till flera rutter samtidigt via constraints() do ... end
.
Det slutade med att jag gjorde detta och satte en global begränsning på alla :id
params för att matcha det med ett 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å så sätt matchar /posts/123 eller /posts/foobar inte längre /posts/:id och 404 innan kontrollåtgärden anropas, vilket undviker PG-typfelet.
Alla mina modeller kommer att använda UUID för sina ID så detta är rent och torrt. Om jag hade några modeller med heltals-ID också, skulle det vara lite mindre rent.