Rails3のRouterでドットを許可しようとしてはまる
Posted at 03 Feb 2011.
categories: Ruby on Rails, Rails3.0.3, Ruby, プログラミング
Rails3で刷新されたRouterですが、URLパラメータに使用できる値は /(スラッシュ)と.(ドット)以外になっているようです。
ドットを使用したい場合は以下のようにconstraintを使用すればいいのですが、
RoutesTest::Application.routes.draw do
get '/somepath/:p1/:p2' => 'some#action', :p1 => /.*/, :p2 => /.*/
end
不動小数点形式のみを許可しようとして文字集合で指定した場合、 RSpec2でのcontrollerテストでRouting Errorになる問題が発生。 (ブラウザ経由のアクセスでは問題なかった)
RoutesTest::Application.routes.draw do
get '/somepath/:p1/:p2' => 'some#action', :p1 => /[\d\.]+/, :p2 => /[\d\.]+/
end
原因までは分からなかったが、バックスラッシュが問題になっているようで バックスラッシュを使わずに記述することでとりあえず正常動作した。
RoutesTest::Application.routes.draw do
get '/somepath/:p1/:p2' => 'some#action', :p1 => /[0-9]+[.][0-9]+/, :p2 => /[0-9]+[.][0-9]+/
end