我正在研究Michael Hartl关于Rails的优秀教程,但是我在第11章练习7时遇到了麻烦。
本练习是:
添加嵌套路线 / users / 1 / microposts显示全部 用户1的微博。(你也会 必须添加一个Microposts控制器 索引动作和相应的视图。)
我已成功完成此操作,方法是将我的routes.rb
文件更改为:
resources :users do
resources :microposts, :only => [:create, :destroy]
end
我能够从浏览器成功呼叫/ users / 1 / microposts。但是,microposts_controller_spec.rb中的大多数测试现在都被破坏了。运行自动测试时收到“无路由匹配”错误。例如,第一个测试,简单地说:
it "should deny access to 'create'" do
post :create
response.should redirect_to(signin_path)
end
现在产生以下错误:
1)MicropostsController访问 控制应该拒绝访问'创建' 失败/错误:发布:创建 没有路线匹配{:controller =>“microposts”, :动作=> “中创建”}
当我查看rake routes
,我找到了这个条目:
user_microposts POST /users/:user_id/microposts(.:format) {:action=>"create", :controller=>"microposts"}
表明路线确实存在。
有没有其他人在完成本教程时遇到此问题?一旦引入嵌套路由,是否需要在spec文件中进行更改? Rspec是否适用于嵌套路由?
感谢
答案 0 :(得分:2)
因为这是一个嵌套路线,您需要通过user_id
通过:
some_user = way_of_creating_a_user_goes_here
post :create, :user_id => some_user.id
RSpec将尝试在没有此参数的情况下转到/microposts
路线。