Rails路由错误?'没有匹配的路由'

11

我一直遇到以下错误:

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

我尝试运行 rake routes 命令,发现该路由已存在:

 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

展示你的 routes.rb 文件。 - Someth Victory
好的,我也会把那个发布上去。 - user1497531
我认为这两者没有关联。至少,这个答案对我的情况不起作用。 - user1497531
你尝试过重置服务器吗?这对我有用!如果不行,像DVG说的那样,请提供完整的跟踪信息。 - Jorge Najera T
你是否可能有另一个WEBrick服务器实例正在运行,就像这个StackOverflow问题中的那位绅士所说的那样? - Paul Fioravanti
显示剩余3条评论
2个回答

1

尝试修复拼写错误:

root :to 'static_pages#home'

而不是root to:,并将其移动到块的最后一行。如果有区别,请告诉我!

奇怪的是,我建立了一个新项目,其中路由文件只是简单地读取:

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 的技巧在控制台中验证路径非常有用!)


小心保留名称。尝试不使用static_pages,看看会发生什么。 - bcackerman
root to: 'static_pages#home' 是正确的语法。 - Ian Vaughan

0

我曾经遇到过类似的问题,我的路由只返回根页面,但在rake routes中却显示出来。根据一位开发者的说法,对于特定命名空间和所有路由,root to: (routing)必须始终放在最后。这与Rails路由指南(参见http://guides.rubyonrails.org/routing.html#using-root)中所说的任何对根目录的调用都应该在文件顶部相矛盾。那对我来说肯定行不通。有趣的是...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接