Puoi aggiungere un vincolo di instradamento a più percorsi alla volta tramite constraints() do ... end
.
Ho finito per farlo e impostare un vincolo globale su tutti i :id
params per abbinarlo a un'espressione regolare 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
In questo modo, /posts/123 o /posts/foobar non corrispondono più a /posts/:id e 404 prima di invocare l'azione del controller, evitando così l'errore di tipo PG.
Tutti i miei modelli utilizzeranno UUID per i loro ID, quindi questo è pulito e ASCIUTTO. Se avessi anche alcuni modelli con ID interi, sarebbe un po' meno pulito.