Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No route matches {:action=>"show", :controller=>"users"} Error

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?

like image 936
Noah Clark Avatar asked Aug 15 '26 17:08

Noah Clark


1 Answers

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.

like image 178
Vincent Agnello Avatar answered Aug 17 '26 07:08

Vincent Agnello



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!