所以我不断遇到以下错误:
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技巧对于验证控制台中的路径非常有用!)