1

Rails に関する Michael Hartl の優れたチュートリアルに取り組んでいますが、第 11 章の演習 7 で問題が発生しています。

この演習は次のとおりです。

/users/1/microposts がユーザー 1 のすべてのマイクロポストを表示するように、ネストされたルートを追加します (マイクロポスト コントローラーのインデックス アクションと対応するビューも追加する必要があります)。

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 アクセス制御は「作成」へのアクセスを拒否する必要があります 失敗/エラー: post :create 一致するルートがありません {:controller=>"microposts", :action=>"create"}

チェックしたらrake routes

、次のエントリを見つけました。

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

これは、ルートが存在することを示唆しています。

チュートリアルを完了しているときに、他の誰かがこの問題に遭遇しましたか? ネストされたルートを導入したら、spec ファイルに変更を加える必要がありますか? Rspec はネストされたルートで動作しますか?

ありがとう

4

1 に答える 1

2

これはネストされたルートであるため、次を通過する必要がありますuser_id

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

/micropostsRSpec は、このパラメーターなしでルートに移動しようとします。

于 2011-01-30T21:14:34.173 に答える