PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Évitez l'erreur PG ::InvalidTextRepresentation lors de l'utilisation de l'UUID Postgres dans Rails

Vous pouvez ajouter une contrainte de routage à plusieurs routes à la fois via constraints() do ... end .

J'ai fini par faire cela et définir une contrainte globale sur tous les :id params pour le faire correspondre à une expression régulière 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 cette façon, /posts/123 ou /posts/foobar ne correspondent plus à /posts/:id et 404 avant même d'invoquer l'action du contrôleur, évitant ainsi l'erreur de type PG.

Tous mes modèles utiliseront UUID pour leurs identifiants, donc c'est propre et sec. Si j'avais aussi des modèles avec des ID entiers, ce serait un peu moins propre.