Rails Routing Error? 'No route matches'

22,715

Try fixing the typo:

root :to 'static_pages#home'

(rather than root to:), and moving it to the last line of the block. And let me know if that makes a difference!

What's odd is that I built a fresh project with a routing file that simply reads:

RoutingTest::Application.routes.draw do
  resources :users
  root :to => "static_pages#home"
end

When I ran this in the console, I got the same error you're seeing:

>> r = Rails.application.routes ; true
=> true
>> r.recognize_path("/users/1")
=> ActionController::RoutingError: No route matches "/users"

... but when I run the same thing in a slightly older project, I get:

>> r = Rails.application.routes ; true
=> true
>> r.recognize_path("/users/1")
=> {:action=>"show", :controller=>"users", :id=>"1"}

So I have little confidence that what I'm telling you will make a difference. (Aside from that, the Rails.application.routes trick is useful for verifying paths in the console!)

Share:
22,715
user1497531
Author by

user1497531

Updated on April 08, 2020

Comments

  • user1497531
    user1497531 about 4 years

    So I keep running into the following error:

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

    I tried running rake routes and I can see that the route exists:

     user         GET          /users/:id(.:format)       users#show
                  PUT          /users/:id(.:format)       users#update
                  DELETE       /users/:id(.:format)       users#destroy
    

    But every time I try visiting the page "/users/1" (1 being the user id), I get the above error. Any ideas? Thanks!

    Here's my routes.rb:

    SampleApp::Application.routes.draw do
      root to: 'static_pages#home'
    
      resources :users
      resource :sessions, only: [:new, :create, :destroy]
    
    
      match '/signup',  to: 'users#new'
      match '/signin',  to: 'sessions#new'
      match '/signout', to: 'sessions#destroy', via: :delete
    
      match '/help',    to: 'static_pages#help'
      match '/about',   to: 'static_pages#about'
      match '/contact', to: 'static_pages#contact'
    

    Here's my users_controller.rb:

    class UsersController < ApplicationController
    
      before_filter :signed_in_user, only: [:index, :edit, :update]
      before_filter :correct_user,   only: [:edit, :update]
    
      def show
        @user = User.find(params[:id])
      end
    
      def new
        @user = User.new
      end
    
      def create
        @user = User.new(params[:user])
        if @user.save
          sign_in @user
          flash[:success] = "Welcome to the Paper Piazza!"
          redirect_to @user
        else
          render 'new'
        end
      end
    
      def edit
        @user = User.find(params[:id])
      end
    
      def update
        if @user.update_attributes(params[:user])
          flash[:success] = "Profile updated"
          sign_in @user
          redirect_to @user
        else
          render 'edit'
        end
      end
    
      def index
        @users = User.paginate(page: params[:page])
      end
    
      private
    
        def signed_in_user
          unless signed_in?
            store_location
            redirect_to signin_path, notice: "Please sign in."
          end
        end
    
        def correct_user
          @user = User.find(params[:id])
          redirect_to(root_path) unless current_user?(@user)
        end
    end