没有路由匹配与rake路由的错误冲突

时间:2011-08-26 14:18:42

标签: ruby-on-rails-3 routes

我添加了一项测试,以确认我的观点中出现的错误。

 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"}

为什么我的测试(和应用程序)认为没有路由匹配,显然它应该匹配后一种路线?

1 个答案:

答案 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如何使用它。

Railscast

Friendly ID at Github