2011-12-14 12 views
1

私はブログを構築しています。私はユーザーに投稿を関連づけたい。私はそうのようにルートを設定している:Railsルートとrspecテストエラー

resources :users do 
resources :posts 
end 

resources :sessions, :only => [:new, :create, :destroy] 

match '/signup', :to => 'users#new' 
match '/login', :to => 'sessions#new' 
match '/logout', :to => 'sessions#destroy' 

root :to => "pages#home" 

これは、ユーザーとの記事を関連付けて、私はrake routesを行う際には、次のようになります。私は、ルート内の他の変更を行った前

user_posts GET /users/:user_id/posts(.:format)   {:action=>"index", :controller=>"posts"} 
user_posts POST /users/:user_id/posts(.:format)   {:action=>"create", :controller=>"posts"} 
new_user_post GET /users/:user_id/posts/new(.:format)  {:action=>"new", :controller=>"posts"} 
edit_user_post GET /users/:user_id/posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"} 
user_post GET /users/:user_id/posts/:id(.:format)  {:action=>"show", :controller=>"posts"} 
user_post PUT /users/:user_id/posts/:id(.:format)  {:action=>"update", :controller=>"posts"} 
user_post DELETE /users/:user_id/posts/:id(.:format)  {:action=>"destroy", :controller=>"posts"} 
    users GET /users(.:format)       {:action=>"index", :controller=>"users"} 
    users POST /users(.:format)       {:action=>"create", :controller=>"users"} 
    new_user GET /users/new(.:format)      {:action=>"new", :controller=>"users"} 
edit_user GET /users/:id/edit(.:format)    {:action=>"edit", :controller=>"users"} 
     user GET /users/:id(.:format)      {:action=>"show", :controller=>"users"} 
     user PUT /users/:id(.:format)      {:action=>"update", :controller=>"users"} 
     user DELETE /users/:id(.:format)      {:action=>"destroy", :controller=>"users"} 
    sessions POST /sessions(.:format)      {:action=>"create", :controller=>"sessions"} 
new_session GET /sessions/new(.:format)     {:action=>"new", :controller=>"sessions"} 
    session DELETE /sessions/:id(.:format)     {:action=>"destroy", :controller=>"sessions"} 
        /users/:user_id/posts/new(.:format)  {:controller=>"posts", :action=>"create"} 
        /users/:user_id/posts/:id/edit(.:format) {:controller=>"posts", :action=>"update"} 
        /users/:user_id/posts/:id(.:format)  {:controller=>"posts", :action=>"destroy"} 
    signup  /signup(.:format)      {:controller=>"users", :action=>"new"} 
    login  /login(.:format)       {:controller=>"sessions", :action=>"new"} 
    logout  /logout(.:format)      {:controller=>"sessions", :action=>"destroy"} 
     root  /(.:format)        {:controller=>"pages", :action=>"home"} 

、私はそれからでしょう新しい投稿の作成、編集、更新を試みてください。私は、編集や更新の記事を作成しようとするとき、しかし、私はエラーが出ます:

No route matches "https://stackoverflow.com/users/1/posts/15/edit" 
No route matches "https://stackoverflow.com/users/1/posts/new" 

だから、私は周りに演奏し、私のルートにこれを追加しました:その後

match '/users/:user_id/posts/new', :to => 'posts#create' 
match '/users/:user_id/posts/:id/edit', :to => 'posts#update' 
match '/users/:user_id/posts/:id', :to => 'posts#destroy' 

を、すべてが働きました。更新、作成、編集など。しかし、私のテストのいくつかは失敗していました。

1) PostsController GET 'new' returns http success 
Failure/Error: get 'posts#new' 
ActionController::RoutingError: 
    No route matches {:controller=>"posts", :action=>"posts#new"} 
# ./spec/controllers/posts_controller_spec.rb:13:in `block (3 levels) in <top (required)>' 

2) PostsController GET 'edit' returns http success 
Failure/Error: get 'edit' 
ActionController::RoutingError: 
    No route matches {:controller=>"posts", :action=>"edit"} 

私は、これらのルートを使用するとすべてが機能していたが、間違っていることを知っています。それとも、テストで変更できるものがありますか?

ありがとうございました。

答えて

2

get 'edit' => No route matches {:controller=>"posts", :action=>"edit"}

ルートはのparamsで:user_idを必要とするために失敗します。あなたが欲しい:

get 'edit', :user_id => 1

はところであなたがあなたのmatch文、例えばと '機知' のルートを上書きしているようだ:

match '/users/:user_id/posts/new', :to => 'posts#create'

resources文で作成 new_user_postルートを優先します

。それが意図されたものだと確信していますか? createアクション(投稿されたフォームを処理する)ではなく、アクション(フォームをレンダリング)に行くには、通常/users/:user_id/posts/newが必要です。

+0

ええ、私はそれらを無効にしていますが、私は何とかやっていることを嬉しく思っていました...しかし、そこにそれらのルートがある前に、編集や更新などができず、上記のエラー: 'No route matches"/users/1/posts/15/edit " " /users/1/posts/new"'...doと一致するルートはありません。私はそれらのルートを外したらうまくいくのですか?これらのエラーを修正するために必要な正しいルートは何ですか? – Jack

+0

あなたは仕事に就くのと非常に近いです。私はRails Routing Guideを参考にして、役に立つルートの完全な説明を確認することをお勧めします。正しいルートに置く必要があります:http://guides.rubyonrails.org/routing.html – zetetic