constraints() do ... end
を使用して、一度に複数のルートにルーティング制約を追加できます。 。
最終的にこれを実行し、すべての:id
にグローバル制約を設定しました。 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
このように、/ posts/123または/posts/foobarはコントローラーアクションを呼び出す前に/posts/:idおよび404と一致しなくなり、PGタイプエラーを回避します。
私のモデルはすべてIDにUUIDを使用するため、これはクリーンでドライです。整数IDのモデルもあるとしたら、少しきれいではなくなります。