PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Vermeiden Sie den PG::InvalidTextRepresentation-Fehler, wenn Sie die Postgres-UUID in Rails verwenden

Über constraints() do ... end können Sie mehreren Routen gleichzeitig eine Routing-Einschränkung hinzufügen .

Am Ende habe ich dies getan und eine globale Einschränkung für alle :id festgelegt params, um es mit einem UUID-Regexp abzugleichen:

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

Auf diese Weise stimmen /posts/123 oder /posts/foobar nicht mehr mit /posts/:id und 404 überein, bevor jemals die Controller-Aktion aufgerufen wird, wodurch der PG-Typfehler vermieden wird.

Alle meine Modelle verwenden UUID für ihre IDs, also ist dies sauber und TROCKEN. Wenn ich auch einige Modelle mit ganzzahligen IDs hätte, wäre es etwas weniger sauber.