2016-08-04 52 views
0

Ich habe einen Benutzer bearbeiten Form, und wenn ich versuche, das Formular abzuschicken, ich die folgende Fehlermeldung erhalten:Rails ist nicht eine meiner Routen zu finden [PATCH]

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

Hier ist meine Benutzer-Controller:

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 

Meine routes.rb Datei:

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 

ich lief rake Routen, um auch sicher, dass ich alle Strecken hatte ich neede d, und ich fand die PATCH Route für Benutzer in ihm:

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

Ich habe versucht, den Fehler zwei Stunden zu finden, aber ohne Erfolg (wie, warum ich bin Entsendung hier)

hier ist meine Form Teil:

<%= 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 %> 

und hier ist mein 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> 
  • Vielen Dank im Voraus
+0

In Ihrem HTML, die Sie anrufen '[PATCH]„/ users/1/bearbeite "' aber deine aktuelle Route ist 'PATCH/users/1'. Zeigen Sie den HTML-Code und das Formular an. –

+0

Ich habe das HTML und Formular hochgeladen – BeepBoop

Antwort

0

Ok, ich denke, ich habe das Problem gefunden.

Also im Grunde, wie Max Pleaner wies darauf hin, ich rufe [PATCH] "https://stackoverflow.com/users/1/edit" wenn es PATCH /users/1. so sein sollte, änderte ich mein URL-Argument in meiner edit.html.erb Datei

aus:

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

zu:

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

0

Das REST-Verb für die Route, die Sie zugreifen möchten, ist GET, weil in der Regel der „Bearbeiten“ Aktion verwendet, um eine Form zu machen, um das Objekt (in diesem Fall des Benutzer) zu bearbeiten. Wenn Sie das PATCH Verb verwenden möchten, um einen Benutzer zu aktualisieren, sollten Sie in Ihrem Fall PATCH zu "/ users/1"