No route matches {:action=>"show", :controller=>"users"} Error
10,106
It looks like to me that the show
action isn't getting the user information it needs to get the correct page. The assigns
method is just creating an instance variable. The user_path
call will need a User mock or object to make the call work correctly.
Comments
-
Noah Clark almost 2 years
I have the following going on:
rspec test in users_controller_spec:
it "should redirect to the user show page" do post :create, :user => @attr response.should redirect_to(user_path(assigns(:user))) end
In my users_controller I have the following:
def show @user = User.find(params[:id]) @title = @user.name end def create @title = "Sign up" @user = User.new(params[:user]) if @user.save redirect_to @user, :notice => "Signed Up!" else @title = "Sign up" render "new" end end
In my routes.rb I have the following:
Psra::Application.routes.draw do resources :users resources :sessions # Root Route root :to => 'pages#home' # Pages Routes match '/contact', :to => 'pages#contact' match '/about', :to => 'pages#about' match '/help', :to => 'pages#help' match '/signup', :to => 'users#new' # Users Route match '/signup', :to => 'users#new' #Sessions Routes get "logout" => "sessions#destroy", :as => "logout" get "login" => "sessions#new", :as => "login" end
And Here is my rake routes
users GET /users(.:format) {:action=>"index", :controller=>"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"} PUT /users/:id(.:format) {:action=>"update", :controller=>"users"} DELETE /users/:id(.:format) {:action=>"destroy", :controller=>"users"} sessions GET /sessions(.:format) {:action=>"index", :controller=>"sessions"} POST /sessions(.:format) {:action=>"create", :controller=>"sessions"} new_session GET /sessions/new(.:format) {:action=>"new", :controller=>"sessions"} edit_session GET /sessions/:id/edit(.:format) {:action=>"edit", :controller=>"sessions"} session GET /sessions/:id(.:format) {:action=>"show", :controller=>"sessions"} PUT /sessions/:id(.:format) {:action=>"update", :controller=>"sessions"} DELETE /sessions/:id(.:format) {:action=>"destroy", :controller=>"sessions"} root / {:controller=>"pages", :action=>"home"} contact /contact(.:format) {:controller=>"pages", :action=>"contact"} about /about(.:format) {:controller=>"pages", :action=>"about"} help /help(.:format) {:controller=>"pages", :action=>"help"} signup /signup(.:format) {:controller=>"users", :action=>"new"} /signup(.:format) {:controller=>"users", :action=>"new"} logout GET /logout(.:format) {:action=>"destroy", :controller=>"sessions"} login GET /login(.:format) {:action=>"new", :controller=>"sessions"}
This all results in the following error:
1) UsersController POST 'create' success should redirect to the user show page Failure/Error: response.should redirect_to(user_path(assigns(:user))) ActionController::RoutingError: No route matches {:action=>"show", :controller=>"users"} # ./spec/controllers/users_controller_spec.rb:95:in `block (4 levels) in <top (required)>'
Any ideas on what I'm doing wrong?