2016-08-04 25 views
0

我有一個用戶編輯表單,每當我試圖提交該表格,我得到以下錯誤:Rails的是沒有找到我的路線之一[PATCH]

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

這裏是我的用戶控制器:

class UsersController < ApplicationController 
    before_action :logged_in_user, only: [:edit, :update] 
    def new 
    @user = User.new 
    end 

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

    def create 
    @user = User.new(user_params) 
    if @user.save 
     flash[:success] = 'Signup Successful!' 
     log_in @user 
     redirect_to @user 
    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) 
    end 

    def logged_in_user 
     if !(logged_in?) 
     flash[:danger] = "Please log in" 
     redirect_to login_url 
     end 
    end 

    end 

我的routes.rb文件:

Rails.application.routes.draw do 
    get 'sessions/new' 
    root 'static_pages#home' 
    get '/help', to: 'static_pages#help' 
    get '/about', to: 'static_pages#about' 
    get '/signup', to: 'users#new' 
    post '/signup', to: 'users#create' 
    get '/login', to: 'sessions#new' 
    post '/login', to: 'sessions#create' 
    delete '/logout', to: 'sessions#destroy' 
    resources :users 
end 

我也跑,以確保我有所有我neede路線耙路線d,我發現它在爲用戶PATCH路線:

PATCH /users/:id(.:format)  users#update 
PUT /users/:id(.:format)  users#update 

我試圖找到的bug了兩個小時,但無濟於事(這是爲什麼我在這裏發帖)

這裏是我的形式分:

<%= form_for(@user, url: url) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 

    <%= f.label :name %> 
    <%= f.text_field :name, class: 'form-control' %> 

    <%= f.label :email %> 
    <%= f.email_field :email, class: 'form-control' %> 

    <%= f.label :password %> 
    <%= f.password_field :password, class: 'form-control' %> 

    <%= f.label :password_confirmation, "Confirmation" %> 
    <%= f.password_field :password_confirmation, class: 'form-control' %> 

    <%= f.submit yield(:button_text), class: "btn btn-primary" %> 
<% end %> 

,這裏是我的edit.html.erb

<%provide(:title, 'Edit')%> 
<%provide(:button_text, 'Save Changes')%> 
<h1>Edit</h1> 

<div class = 'row'> 
    <div class = 'col-md-6 col-md-offset-3' > 
     <%=render 'form', url: edit_user_path(@user)%> 
     <div class = "gravatar-edit"> 
      <%=gravatar_for @user%> 
      <a href = "http://gravatar.com/emails", target = '_blank'>Change</a> 
     </div> 
    </div> 
</div> 
  • 在此先感謝
+0

在你的HTML,你打電話'[PATCH]「/用戶/ 1 /編輯「,但您的實際路線是」PATCH/users/1「。顯示HTML和表單。 –

+0

我上傳了html和表單 – BeepBoop

回答

0

好吧,我想我已經找到了問題。

<%=render 'form', url: edit_user_path(@user)%>

所以基本上,作爲最大Pleaner指出的那樣,我打電話[PATCH] "https://stackoverflow.com/users/1/edit"當它應該是PATCH /users/1.所以,從我改變了我的URL參數在我edit.html.erb文件

到:

<%=render 'form', url: user_path(@user)%>

0

其餘動詞爲你要訪問的路線是GET,因爲用於渲染的形式編輯的對象(在這種情況下,用戶)通常是「編輯」的行動。如果你想使用PATCH動詞來更新用戶,你應該將PATCH設置爲「/ users/1」