ActionController::RoutingError(没有路由匹配 [PATCH]“/users/1/edit”):

ActionController::RoutingError (No route matches [PATCH] "/users/1/edit"):

我是 Rails 上 Ruby 的新手,我试图在这里找到我的问题的答案,但我没有找到任何可以帮助我的东西。我尝试在我的路由文件中添加一个补丁,但我认为我做的不正确。

routes.rb

 get 'website_sign_up' => 'users#new'
 post '/users' => 'users#create'
 get "users/:id/edit" => "users#edit", :as => :user
 patch "users/update" => "users#update", :as => "users/update"

user_controller.rb

class UsersController < ApplicationController
def new
 @user = User.new
end


def create
   @user = User.new(user_params)
   if @user.save
      session[:user_id] = user.id
      redirect_to '/signup_success'
   else
    render 'new'
   end

end

def edit
  @user = User.find(params[:id])
end

def update
   @user = User.find(params[:id])
    if @user.update_attributes(user_params)
       flash[:success] = "Profile updated"
       redirect_to @user

    else
       render 'edit'
    end
end

private

  def user_params
      params.require(:user).permit(:name, :email, :password, :password_confirmation, :phone)
   end
end

如果有人能指出正确的方向,我将不胜感激。

我希望在您的 patch/put 路由中看到一个 :id 参数。也许这就是问题所在。如果您正在为表单使用表单助手,我怀疑就是这样。

无论如何,我强烈强烈建议您遵循Rails约定并使用resources指令来指定您的RESTful路由。

config/routes.rb

resources :users 

将此行添加到您的路由文件,然后从命令行 运行 rake routes 查看它为您生成的路由。

您可以在 Rails Guides 中阅读有关 RESTful 资源路由的更多信息。默认情况下,该指令将创建以下路由:

GET         /users            users#index
GET         /users/new        users#new
POST        /users            users#create
GET         /users/:id        users#show
GET         /users/:id/edit   users#edit
PATCH/PUT   /users/:id        users#update
DELETE      /users/:id        users#destroy

我会以此为起点。

如果需要,您可以限制它生成的路由:

resources :users, only: [:new, :create, :edit, :update]

希望对您有所帮助。