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.

Share:
10,106
Noah Clark
Author by

Noah Clark

I like you.

Updated on June 04, 2022

Comments

  • Noah Clark
    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?