加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails路由错误? “没有路线匹配”

发布时间:2020-12-16 22:01:09 所属栏目:百科 来源:网络整理
导读:所以我不断遇到以下错误: 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
所以我不断遇到以下错误:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读