1

我正在阅读 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 访问控制应该拒绝访问 'create' 失败/错误:post :create 没有路由匹配 {:controller=>"microposts", :action=>"create"}

当我检查rake routes

,我发现这个条目:

user_microposts POST   /users/:user_id/microposts(.:format)     {:action=>"create", :controller=>"microposts"}

这表明该路线确实存在。

有没有其他人在完成教程时遇到过这个问题?引入嵌套路由后,是否需要在规范文件中进行更改?Rspec 是否适用于嵌套路由?

谢谢

4

1 回答 1

2

因为这是一个嵌套路由,您需要user_id通过:

some_user = way_of_creating_a_user_goes_here
post :create, :user_id => some_user.id

RSpec 将尝试去/microposts没有这个参数的路线。

于 2011-01-30T21:14:34.173 回答