PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Evita l'errore PG::InvalidTextRepresentation quando usi Postgres UUID in Rails

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.