Omezení směrování můžete přidat k více trasám najednou pomocí constraints() do ... end
.
Nakonec jsem to udělal a nastavil globální omezení pro všechny :id
params, aby to odpovídalo regulárnímu výrazu UUID:
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
Tímto způsobem se /posts/123 nebo /posts/foobar již neshodují s /posts/:id a 404 před vyvoláním akce ovladače, čímž se zabrání chybě typu PG.
Všechny moje modely budou používat UUID pro svá ID, takže je to čisté a SUCHÉ. Kdybych měl nějaké modely také s celočíselnými ID, bylo by to o něco méně čisté.