PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Evite o erro PG::InvalidTextRepresentation ao usar Postgres UUID no Rails


Você pode adicionar uma restrição de roteamento a várias rotas ao mesmo tempo via constraints() do ... end .

Acabei fazendo isso e definindo uma restrição global em todos os :id params para combiná-lo com um regexp 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

Dessa forma, /posts/123 ou /posts/foobar não corresponde mais a /posts/:id e 404 antes de invocar a ação do controlador, evitando assim o erro de tipo PG.

Todos os meus modelos usarão UUID para seus IDs, então isso é limpo e DRY. Se eu também tivesse alguns modelos com IDs inteiros, seria um pouco menos limpo.