Bạn có thể thêm một ràng buộc định tuyến cho nhiều tuyến cùng một lúc thông qua constraints() do ... end
.
Tôi đã kết thúc việc này và thiết lập một ràng buộc chung cho tất cả :id
tham số để khớp nó với một UUID regexp:
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
Bằng cách này, / posts / 123 hoặc / posts / foobar không còn khớp với / posts /:id và 404 trước khi gọi hành động controller, do đó tránh được lỗi kiểu PG.
Tất cả các mô hình của tôi sẽ sử dụng UUID cho ID của họ để điều này sạch sẽ và KHÔ. Nếu tôi cũng có một số mô hình có ID số nguyên, nó sẽ kém gọn gàng hơn một chút.