たとえば、以下のようなルーティングを定義している場合には /2010/13 などは存在しない日付なわけで。。
/yyyy/m?m
存在しない日付の場合は 404 かなんかを返さなければいけない。
コントローラでやってもいいけど、ルーティングだけでできないだろうか。。
constraintsオプションにはlambdaを指定できるらしいのでやってみた。
get '/:year/:month' => 'site#index', constraints: lambda { |request|
Date.valid_date?(request.params[:year].to_i, request.params[:month].to_i, 1)
}
lambdaの中でtrueを返せばルーティングが通るので、これで良いっぽい。
同様に、/yyyy/m?m/d?dのルーティングを作りたければ、
get '/:year/:month/:day' => 'site#index', constraints: lambda { |request|
Date.valid_date?(request.params[:year].to_i, request.params[:month].to_i, reuqest.params[:day].to_i)
}
ということ。
ルーティングでこんなことまできるとはな・・。