在我的控制器的规格,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