Rails Routing Error? 'No route matches'
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!)
user1497531
Updated on April 08, 2020Comments
-
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