sql >> Base de Datos >  >> RDS >> PostgreSQL

Evite el error PG::InvalidTextRepresentation al usar UUID de Postgres en Rails

Puede agregar una restricción de enrutamiento a varias rutas a la vez a través de constraints() do ... end .

Terminé haciendo esto y estableciendo una restricción global en todos los :id params para que coincida con una expresión regular de 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

De esta forma, /posts/123 o /posts/foobar ya no coinciden con /posts/:id y 404 antes de invocar la acción del controlador, evitando así el error de tipo PG.

Todos mis modelos usarán UUID para sus ID, por lo que está limpio y SECO. Si tuviera algunos modelos con ID enteros también, sería un poco menos limpio.