我添加了一项测试,以确认我的观点中出现的错误。
2) NodesController GET /nodes/:id should be successful
Failure/Error: get :show, :id => @node.id
ActionController::RoutingError:
No route matches {:id=>"nodexyz.example.com", :controller=>"nodes", :action=>"show"}
# ./spec/controllers/nodes_controller_spec.rb:21:in `block (3 levels) in <top (required)>'
然而,rake路线似乎很好
nodes GET /nodes(.:format) {:action=>"index", :controller=>"nodes"}
node GET /nodes/:id(.:format) {:action=>"show", :controller=>"nodes"}
为什么我的测试(和应用程序)认为没有路由匹配,显然它应该匹配后一种路线?
答案 0 :(得分:0)
如果这是你得到的错误:
No route matches {:id=>"nodexyz.example.com", :controller=>"nodes", :action=>"show"}
然后我会说最可能的问题是:你传递给节点控制器的id是“nodexyz.example.com”。除非您另有指定,否则您的控制器希望您传递的默认值是来自节点表的记录ID,该记录ID对应于包含字符串“nodexyz.example.com”的记录。
如果您希望使用字符串而不是数字ID,则有几种不同的方法可以处理它。我的建议是使用gem friendly_id,因为它易于使用,并且可以防止你不得不做一些工作。 Ryan Bates有一个很好的Railscast如何使用它。