在我的控制器的規格,RSpec的控制器例如PARAM當我執行這一行:與週期
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編碼值,但Rails似乎沒有在params散列中解碼它們。
爲什麼在這種情況下不能使用期間?
我怎樣才能在經過時間的值(無控制器使用String#gsub
手動解碼它
我添加了添加此約束約束我的routes.rb文件,但這似乎沒有幫助,是軌道攔截的一部分應用約束之前? – tlehman
你必須告訴我你是如何添加約束的。 – rossta
這是一個錯字,你是絕對正確的。 – tlehman