私のコントローラー仕様では、次の行を実行すると:
post :register_pass, :device_id => 'DEV1C3', :pass_type_id => 'pass.com.example.GSPassType', :serial_no => '5ER14L'
私は得るActionController::RoutingError
:
Failure/Error: post :register_pass, :device_id => 'DEV1C3', :pass_type_id => 'pass.com.example.GSPassType', :serial_no => '5ER14L'
ActionController::RoutingError:
No route matches {:action=>"register_pass", :controller=>"purchases/passbook/registrations", :pass_type_id=>"pass.com.example.GSPassType", :serial_no=>"5ER14L", :device_id=>"DEV1C3"}
rake routes | grep register_pass
返品しても
register_pass POST /v1/devices/:device_id/registrations/:pass_type_id/:serial_no(.:format) {:action=>"register_pass", :controller=>"purchases/passbook/registrations"}
ただし、:pass_type_id
値のピリオドを削除post
すると、上記の行が実行され、ルートが認識されます (rspec を使用してこれを確認し、予想されるコントローラー アクションにブレークポイントを配置して、ルートが機能することを確認しました)。
ピリオド付きの値を使用しようとしRack::Utils.escape
ましたが、それも失敗しました。また、ピリオドを URL エンコードされた値に手動で変更しようとしましたが、レールは params ハッシュでピリオドをデコードしていないようです。
この場合、なぜピリオドが機能しないのですか?
String#gsub
また、ピリオドが渡された値を取得するにはどうすればよいですか (コントローラーで手動でデコードする必要はありませんか?