所以我不断遇到以下错误:
No route matches {:action=>"show",:controller=>"users"}
我尝试运行耙子路线,我可以看到路线存在:
- user GET /users/:id(.:format) users#show
- PUT /users/:id(.:format) users#update
- DELETE /users/:id(.:format) users#destroy
但是每次尝试访问页面“/ users / 1”(1是用户ID)时,我得到上面的错误.有任何想法吗?谢谢!
这是我的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'
这是我的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
解决方法
尝试修复打字错误:
- root :to 'static_pages#home'
(而不是根到:),并将其移动到块的最后一行.让我知道这是否有所作为!
很奇怪的是,我用一个路由文件创建了一个新的项目,只需读取:
- RoutingTest::Application.routes.draw do
- resources :users
- root :to => "static_pages#home"
- end
当我在控制台中运行这个操作时,我遇到了同样的错误:
- >> r = Rails.application.routes ; true
- => true
- >> r.recognize_path("/users/1")
- => ActionController::RoutingError: No route matches "/users"
…但是当我在一个稍旧的项目中运行相同的事情时,我得到:
- >> r = Rails.application.routes ; true
- => true
- >> r.recognize_path("/users/1")
- => {:action=>"show",:controller=>"users",:id=>"1"}
所以我几乎没有信心我所告诉你会有所作为. (除此之外,Rails.application.routes技巧对于验证控制台中的路径非常有用!)